【问题标题】:Can you initialise a pointer variable with Golang reflect?你能用 Golang 反射初始化一个指针变量吗?
【发布时间】:2015-12-08 10:24:47
【问题描述】:

假设

type A struct {
   A1 int
}
var a *A

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

【问题讨论】:

    标签: go


    【解决方案1】:

    获取变量a的可寻址值:

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

    分配一个新的A

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

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

    va.Set(v)
    

    playground example

    由于 Go 按值传递参数,因此无法将值设置为以 relfect.ValueOf(a) 开头的 a

    【讨论】:

    • 传递 a 而不是 &a 时如何工作?在那种情况下,我看不出如何将新值设置为 a。
    • 无法使用reflect.ValueOf(a) 设置值a
    猜你喜欢
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    相关资源
    最近更新 更多