【发布时间】:2014-11-04 20:56:40
【问题描述】:
我正在尝试在 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 作为中介来完成;还有其他更有效的方法吗?
【问题讨论】:
-
使用 JSON 作为中介无论如何都会使用反射.. 假设您将使用 stdlib
encoding/json包来执行该中间步骤.. 你能给出一个示例映射和示例结构吗这个方法可以用吗? -
是的,这就是我试图避免使用 JSON 的原因。似乎希望有一种我不知道的更有效的方法。
-
你能举个例子吗?如-显示一些伪代码来演示此方法将做什么?
-
嗯……
unsafe包可能有办法……但我不敢尝试。除此之外.. 反射是必需的,因为您需要能够查询与类型关联的元数据,以便将数据放入其属性中。将其包装在json.Marshal+json.Decode调用中会相当直接。但这是反射的两倍。 -
我删除了关于反射的评论。我对尽可能高效地执行此操作更感兴趣。如果这意味着使用反射就可以了。
标签: go