【发布时间】:2021-02-07 20:04:34
【问题描述】:
有没有人可以帮助我:我需要为不同类型的结构设置字段值。我有一张从数据库中提取的数据地图。在这个特定的函数中,我想创建一个任何结构的对象,其字段与地图匹配
type Member struct {
firstName string `xml: "FIRST_NAME"`
lastName string `xml: "LAST_NAME"`
}
type CardData struct {
cardType string `xml: "CARD_TYPE"`
cardNumber string `xml: "CARD_NUMBER"`
}
func main() {
fields := make(map[string]string)
fields['CARD_TYPE'] = "VISA"
fields['FIRS_NAME'] = "Aria Stark"
member := Combiner(fields, Member{})
card := Combiner(fields, CardData{})
}
func Combiner(m map[string]string, obj interface{}) interface{} {
ff := reflect.ValueOf(obj)
typeOfS := ff.Type()
for i := 0; i< ff.NumField(); i++ {
tag := typeOfS.Field(i).Tag.Get("xml")
if _, ok := m[tag]; ok {
n := typeOfS.Field(i).Name
reflections.SetField(&obj, n, m[tag])
} else {
fmt.Printf("The field %s is not found \n", tag)
}
}
return obj
}
但是我在这个字符串“reflections.SetField(&obj, n, m[tag])”中得到一个错误 它不起作用,因为“obj”不是结构
非常感谢您的所有回答!
【问题讨论】: