你能否使用Golang反射初始化指针变量?

3
假设:
type A struct {
   A1 int
}
var a *A

我们能否使用反射对“a”进行初始化?reflect.ValueOf(a).Type().Elem()可以获得类型,但好像reflect.ValueOf(a).Elem()是零值而且不可寻址。
1个回答

5
获取变量 a 的可寻址值:
var a *A
va := reflect.ValueOf(&a).Elem()

分配一个新的A

v := reflect.New(va.Type().Elem())

将指向新分配的A的指针赋值给变量a:
va.Set(v)

playground示例

由于Go传递参数是按值传递的,因此无法使用reflect.ValueOf(a)来设置以a开头的值。


当传递一个变量a而不是&a时,这个怎么可能工作呢?在这种情况下,我看不出你如何能够给a设置一个新的值。 - rino
1
无法使用reflect.ValueOf(a)来设置值a - Charlie Tumahai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接