【发布时间】:2015-03-22 20:11:04
【问题描述】:
我有一个结构体 v,其中包含成员 A、B、C 字符串。使用反射,我可以获得字段的名称及其值:
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"
但这显然行不通。如果只知道字段的名称,是否可以将值分配给结构?
在实践中,我试图将 map[string]string 中的值分配给结构中的相应字段,其中结构和映射定义可能会随着时间的推移而扩展变化,并且映射可能包含更多或更少的值结构。我考虑过用 JSON 来做,但这种方法让我有点冷,看到使用反射“几乎”在那里是多么容易!
谢谢, 肯
【问题讨论】:
标签: dictionary reflection struct go