我尝试在Go语言中创建一个泛型方法,它将使用map[string]interface{}
中的数据填充struct
,例如,方法的签名和用法如下所示:
func FillStruct(data map[string]interface{}, result interface{}) {
...
}
type MyStruct struct {
Name string
Age int64
}
myData := make(map[string]interface{})
myData["Name"] = "Tony"
myData["Age"] = 23
result := &MyStruct{}
FillStruct(myData, result)
// result now has Name set to "Tony" and Age set to 23
我知道这可以通过使用JSON作为中介来完成;有没有其他更有效的方法?
9条答案
按热度按时间uinbv5nw1#
最简单的方法是使用https://github.com/mitchellh/mapstructure
如果你想自己做,你可以这样做:
http://play.golang.org/p/tN8mxT_V9h
dz6r00yl2#
Hashicorp的https://github.com/mitchellh/mapstructure库可以实现以下功能:
第二个
result
参数必须是结构的地址。epggiuax3#
encoding/json
包仅举个例子:
d5vmydt94#
你可以做到这一点...它可能会变得有点难看,你会面临一些试验和错误方面的Map类型...但这里的基本要点:
工作样品:http://play.golang.org/p/PYHz63sbvL
cwtwac6a5#
有两个步骤:
1.将接口转换为JSON字节
1.将JSON字节转换为结构
下面是一个例子:
v09wglhw6#
可以通过JSON进行往返:
示例:
unftdfkk7#
我修改了dave的答案,并添加了递归特性,我还在开发一个更加用户友好的版本,例如,map中的数字字符串应该能够转换为struct中的int。
5w9g7ksd8#
这里的函数通过标记将Map转换为结构。如果标记不存在,它将通过fieldByName查找。
多亏了https://gist.github.com/lelandbatey/a5c957b537bed39d1d6fb202c3b8de06
vktxenjb9#
简单的方法就是将其编组为json字符串,然后将其解组为struct
here is the link