【问题标题】:Using reflect, how do you initialize value of a struct pointer field?使用反射,如何初始化结构指针字段的值?
【发布时间】:2013-05-09 06:51:30
【问题描述】:
package main

import (
    "fmt"
    "reflect"
)

type A struct {
    D *int
}

func main() {
    a := &A{}
    v := reflect.ValueOf(a)
    e := v.Elem()
    f := e.Field(0)
    z := reflect.Zero(f.Type().Elem())
    f.Set(z)
    fmt.Println(z)
}

panic: reflect.Set: int 类型的值不能分配给 *int 类型

如何将 *D 设置为默认值使用反射

【问题讨论】:

  • D 是一个以nil 开头的指针。它没有指向任何地方,因此“设置 *D”没有意义

标签: go


【解决方案1】:

您需要有一个指针值 (*int),但 reflect 文档为 func Zero(typ Type) Value 指出:

返回值既不可寻址也不可设置。

在您的情况下,您可以改用 New:

z := reflect.New(f.Type().Elem())

【讨论】:

    【解决方案2】:

    试试这个

    var i int
    f.Set(reflect.ValueOf(&i))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多