在Go中将组合对象转换为json

我是Go的新手,不确定如何解决此问题。用OOP术语,我有Animal的基类和Cat和Dog的两个子类。我想为Animal指定一个ToJson方法,该方法适用于所有动物。


我的问题是,当我调用dog.ToJson()时,我只获得dog的Dog属性,而没有Animal属性。


如何使ToJson正常工作(即使用递归)?


编辑:更改代码以反映lbonn回答中的建议,但我无法按照我的意愿进行工作。edit2:代码更改后问题的一致性


package main


import (

    "encoding/json"

    "fmt"

)


type Animal struct {

    Name string

}


type Cat struct {

    CatProperty int64

    Animal

}


type Dog struct {

    DogProperty int64

    Animal

}


func ToJson(i interface{}) []byte {

        data,err := json.Marshal(i)

    if err != nil {

        panic("???")

    }

    return data

}


func main() {

    dog := Dog{}

    dog.Name = "rex"

    dog.DogProperty = 2

    fmt.Println(string(ToJson(dog)))

    // Prints {"DogProperty":2}

    // I want it to print {"Name":"rex","DogProperty":2}

}


米脂
浏览 272回答 2
2回答

慕码人8056858

在这里,ToJson方法适用于匿名场Animal的Dog。该呼叫d.ToJson只是的可见性快捷方式d.Animal.ToJson。 GoLang教程:struct中的匿名字段在这里,我将编写一个函数而不是一个方法(一个简单的包装器Marshal):func ToJson(i interface{}) []byte {    data,err := json.Marshal(i)    if err != nil {        panic("???")    }    return data}这并非特定于动物或狗,但实际上并不需要。更一般地说,go中没有真正的继承概念。该语言中使用的对象范式与主流OOP(例如Java或C ++)完全不同。Go常见问题解答对此提供了一些很好的说明。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go