我有一个带有成员 A、B、C 字符串的 struct v。使用反射,我可以获得字段的名称及其值:
typ := v.Type()
for i := 0; i < v.NumField(); i++ {
// gets us a StructField
fi := typ.Field(i)
fieldname := fi.Name
fmt.Println(fieldname)
val := fmt.Sprintf("%v", v.Field(i).Interface())
}
因为我有名字,并且可以得到值 OUT,我可以为字段分配新值吗?我想基本上做:
v.Field(fieldname).Interface() = "new value"
但这显然行不通。如果您只知道字段的名称,是否可以为结构赋值?
在实践中,我试图将值从 a 分配给map[string]string结构中的相应字段,其中结构和映射定义可能会随着时间的推移而扩展,并且映射可能包含比结构更多或更少的值。我考虑过用 JSON 来做,但这种方法让我有点冷淡,因为使用反射来“几乎”到达那里是多么容易!
相关分类