gpt4 book ai didi

go - 具有动态结构类型的Go功能

转载 作者:行者123 更新时间:2023-12-03 10:10:27 26 4
gpt4 key购买 nike

有人可以帮助我吗:我需要为不同类型的结构设置字段值。我有一张包含从数据库提取的数据的 map 。在此特定功能中,我想创建任何结构的对象,其结构与 map 匹配

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”不是结构
非常感谢您的回答!

最佳答案

您必须将指向该对象的指针传递给Combiner函数。从reflections.SetFields的文档中:

obj param has to be a pointer to a struct, otherwise it will soundlyfail.


所以:
member := Combiner(fields, &Member{})
card := Combiner(fields, &CardData{})
并在 Combiner内部:
reflections.SetField(obj, n, m[tag]) 

关于go - 具有动态结构类型的Go功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66092567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com