在Golang中,是否可以将指针参数的值更改为其他值?
例如,
func main() {
i := 1
test(&i)
}
func test(ptr interface{}) {
v := reflect.ValueOf(ptr)
fmt.Println(v.CanSet()) // false
v.SetInt(2) // panic
}
https://play.golang.org/p/3OwGYrb-W-
是否可以让test()
更改i
指向另一个值2?
答案 0 :(得分:3)
不确定这是否是您要找的, 但是,你可以将指针的值更改为其他值。 code below将打印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
}
答案 1 :(得分:2)
现在使用reflect包设置值。关键是设置指针的元素,而不是指针本身。
func test(ptr interface{}) {
v := reflect.ValueOf(ptr).Elem()
v.SetInt(2)
}
请注意,此特定示例不需要反射包,如另一个答案所示。