2 回答
TA贡献1780条经验 获得超5个赞
我认为你必须稍微改变一下实现
var p1 Person
mapstructure.Decode(p_map, &p1)
b := Bundle{
p1,
}
print(b.Struct.(Person).Name) // John will appear
我正在尝试上面的代码,但导致 empty Person。也许Decode函数不能改变的实际值b.Struct(我不确定确切的原因,这只是我的意见),但如果我Person先解码为结构然后分配给Bundle那个作品。
更新:通过一些研究,我发现了问题所在。您必须使用指针而不是结构。这里是更新的代码
package main
import (
"github.com/mitchellh/mapstructure"
)
type Person struct {
Name string
}
type Bundle struct {
Name string
Struct interface{}
}
func main() {
p_map := map[string]string{
"Name": "John",
}
p := &Person{}
mapstructure.Decode(p_map, &p)
print(p.Name) // shows name John
b := Bundle{
"person",
&Person{},
}
mapstructure.Decode(p_map, &b.Struct)
print(b.Struct.(*Person).Name) // Does not show any name. Blank
}
TA贡献1827条经验 获得超8个赞
将 Bundle 中的 Struct 字段类型从 interface{} 更改为 Person 后,它对我有用。
type Bundle struct {
Struct Person
}
print(b.Struct.Name)
- 2 回答
- 0 关注
- 117 浏览
添加回答
举报