英文:
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)
由于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)
Because Go passes arguments by value, it is not possible to set a value to a
starting with relfect.ValueOf(a)
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论