你可以使用Golang的反射(reflect)来初始化一个指针变量。

huangapple go评论79阅读模式
英文:

Can you initialise a pointer variable with Golang reflect?

问题

假设

type A struct {
   A1 int
}
var a *A

我们能否使用反射初始化"a"?reflect.ValueOf(a).Type().Elem()可以得到类型,但似乎reflect.ValueOf(a).Elem()返回的是零值而不是可寻址的地址。

英文:

Suppose

type A struct {
   A1 int
}
var a *A

can we initialise "a" with reflect? reflect.ValueOf(a).Type().Elem() gives the type but it seems reflect.ValueOf(a).Elem() is the zero Value and not addressable.

答案1

得分: 4

获取变量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的值。

英文:

Get addressable value for variable a:

var a *A
va := reflect.ValueOf(&a).Elem()

Allocate a new A:

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

Assign the pointer to newly allocated A to the variable a:

va.Set(v)

playground example

Because Go passes arguments by value, it is not possible to set a value to a starting with relfect.ValueOf(a).

huangapple
  • 本文由 发表于 2015年12月8日 07:09:15
  • 转载请务必保留本文链接:https://go.coder-hub.com/34145072.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定