开始-如何更改指针参数的值?

Som*_*ent 3 reflection go

在Golang中,是否可以将指针参数的值更改为其他值?

例如,

func main() {
    i := 1
    test(&i)
}

func test(ptr interface{}) {
    v := reflect.ValueOf(ptr)

    fmt.Println(v.CanSet()) // false
    v.SetInt(2) // panic
}
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/3OwGYrb-W-

是否可以test()更改i为指向另一个值2?

Sto*_*ica 6

不确定这是否是您要查找的内容,但是可以将指针的值更改为其他值。下面代码将打印2和3:

package main

import (
    "fmt"
)

func main() {
    i := 1

    testAsAny(&i)
    fmt.Println(i)

    testAsInt(&i)
    fmt.Println(i)
}

func testAsAny(ptr interface{}) {
    *ptr.(*int) = 2
}

func testAsInt(i *int) {
    *i = 3
}
Run Code Online (Sandbox Code Playgroud)