相关疑难解决方法(0)

使用reflect,如何设置struct字段的值?

粗略的时间使用reflect包使用struct字段.特别是,还没弄清楚如何设置字段值.

type t struct { fi int; fs string }
var r t = t{ 123, "jblow" }
var i64 int64 = 456
  1. 得到字段的名称我 - 这似乎工作

    var field = reflect.TypeOf(r).Field(i).Name

  2. 获得字段i的值作为a)接口{},b)int - 这似乎有效

    var iface interface{} = reflect.ValueOf(r).Field(i).Interface()

    var i int = int(reflect.ValueOf(r).Field(i).Int())

  3. 设置字段的值i - 尝试一个 - 恐慌

    reflect.ValueOf(r).Field(i).SetInt( i64 )

    panic:reflect.Value·SetInt使用未导出字段获得的值

    假设它不喜欢字段名称"id"和"name",所以重命名为"Id"和"Name"

    a)这个假设是否正确?

    b)如果正确,认为没有必要,因为在同一个文件/包中

  4. 设置字段i的值 - 尝试两个(字段名称大写) - 恐慌

    reflect.ValueOf(r).Field(i).SetInt( 465 )

    reflect.ValueOf(r).Field(i).SetInt( i64 )

    恐慌:反映.值/ SetInt使用不可寻址的值


@peterSO下面的说明是彻底和高质量的

四.这工作:

reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )

他还记录了字段名称必须是可导出的(以大写字母开头)

reflection go go-reflect

94
推荐指数
2
解决办法
7万
查看次数

标签 统计

go ×1

go-reflect ×1

reflection ×1