Go 将提升的字段解组到结构中
我有两个结构。一个继承另一个Go 将提升的字段解组到结构中,go,Go,我有两个结构。一个继承另一个 type Animal struct { Name string `json:"name"` } type Dog struct { Animal Color string `json:"color"` } 当我通过路过的方式去解开狗狗时: { "name": "Loki", "color": "Brown" } 我得到一个*encoding/json.invalidUnmarshaleror。2019/03/10 00:22:
type Animal struct {
Name string `json:"name"`
}
type Dog struct {
Animal
Color string `json:"color"`
}
当我通过路过的方式去解开狗狗时:
{
"name": "Loki",
"color": "Brown"
}
我得到一个*encoding/json.invalidUnmarshaleror。2019/03/10 00:22:35 json:Unmarshalnil*main.Dog
为什么呢
以下是解组代码:
func main() {
var dog *Dog
err := json.Unmarshal([]byte(`{
"name": "Loki",
"color": "Brown"
}`), dog)
if err != nil {
log.Fatal(err)
}
}
那是因为变量dog是nil。尝试将其初始化为指向空狗。或者将其设置为Dog而不是Dog指针,并将地址传递给Unmarshal。这是因为变量Dog为nil。尝试将其初始化为指向空狗。或者将其设置为Dog而不是指向Dog的指针,并将地址传递给Unmarshal。首先,为了明确概念,Golang中没有继承。戈朗喜欢构图而不是继承。你们在那个里对动物和狗做的事叫做围棋 其次,使用json.Unmarshal的正确方法是将指针作为第二个参数传递。因此,要修复您的代码:
func main() {
var dog Dog
err := json.Unmarshal([]byte(`{
"name": "Loki",
"color": "Brown"
}`), &dog)
if err != nil {
log.Fatal(err)
}
}
如果您熟悉C,可以将json.Unmarshal看作类似于scanf的东西。调用者将一个地址传递给scanf,这样scanf就可以将值填充到指针表示的内存位置。首先,为了明确概念,Golang中没有继承。戈朗喜欢构图而不是继承。你们在那个里对动物和狗做的事叫做围棋 其次,使用json.Unmarshal的正确方法是将指针作为第二个参数传递。因此,要修复您的代码:
func main() {
var dog Dog
err := json.Unmarshal([]byte(`{
"name": "Loki",
"color": "Brown"
}`), &dog)
if err != nil {
log.Fatal(err)
}
}
如果您熟悉C,可以将json.Unmarshal看作类似于scanf的东西。调用者将地址传递给scanf,以便scanf可以将值填充到指针表示的内存位置