使用 package.json 处理结构字段时遇到了困难reflect
。特别是,还没弄清楚如何设置字段值。
类型 t 结构 { fi int; fs 字符串 } var rt = t{ 123, “jblow” } var i64 int64 = 456
获取字段 i 的名称 - 这似乎有效
var field = reflect.TypeOf(r).Field(i).Name
将字段 i 的值作为 a) interface{}, b) int - 这似乎可行
var iface interface{} = reflect.ValueOf(r).Field(i).Interface()
var i int = int(reflect.ValueOf(r).Field(i).Int())
字段 i 的设置值 - 尝试一个 - 恐慌
reflect.ValueOf(r).Field(i).SetInt( i64 )
恐慌:reflect.Value·SetInt 使用使用未导出字段获得的值
假设它不喜欢字段名称“id”和“name”,因此重命名为“Id”和“Name”
a) 这个假设正确吗?
b)如果正确,认为没有必要,因为在同一个文件/包中
设置字段 i 的值 - 尝试两个(字段名称大写) - 恐慌
reflect.ValueOf(r).Field(i).SetInt( 465 )
reflect.ValueOf(r).Field(i).SetInt( i64 )
恐慌:reflect.Value·SetInt 使用不可寻址的值
@peterSO 下面的说明是彻底和高质量的
四。这有效:
reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )
他还记录了字段名称必须是可导出的(以大写字母开头)