最佳答案
在使用 reflect
包处理 struct 字段时有一段艰难的时间。特别是,还没有弄清楚如何设置字段值。
type t struct { fi int; fs string } var r t = t{ 123, "jblow" } var i64 int64 = 456
获取字段名称 I-这似乎工作
var field = reflect.TypeOf(r).Field(i).Name
获取字段 i 的值作为 a)接口{} ,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 )
Panic : response. Value · SetInt 使用使用未导出字段获得的值
假设它不喜欢字段名“ Id”和“ Name”,因此将其重命名为“ Id”和“ Name”
A)这个假设正确吗?
B)如果正确,认为没有必要,因为在同一个文件/包
设置字段 i 的值-尝试二(字段名称大写)-慌张
reflect.ValueOf(r).Field(i).SetInt( 465 )
reflect.ValueOf(r).Field(i).SetInt( i64 )
使用无法寻址的值进行设置
下面由@peterSO 提供的说明是全面而高质量的
四,这个可以:
reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )
他还记录了字段名必须可导出(以大写字母开头)