你能用 Golang 反射初始化一个指针变量吗?

rin*_*ino 1 go

认为

type A struct {
   A1 int
}
var a *A
Run Code Online (Sandbox Code Playgroud)

我们可以用反射初始化“a”吗?reflect.ValueOf(a).Type().Elem() 给出了类型,但似乎reflect.ValueOf(a).Elem() 是零值并且不可寻址。

Cer*_*món 5

获取变量的可寻址值a

var a *A
va := reflect.ValueOf(&a).Elem()
Run Code Online (Sandbox Code Playgroud)

分配一个新的A

v := reflect.New(va.Type().Elem())
Run Code Online (Sandbox Code Playgroud)

将指针分配A给新分配的变量a

va.Set(v)
Run Code Online (Sandbox Code Playgroud)

游乐场示例

由于 Go 按值传递参数,因此无法将值设置为arelfect.ValueOf(a).