为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
米脂 2021-05-10 13:42:18
我是Go的新手,不确定如何解决此问题。用OOP术语,我有Animal的基类和Cat和Dog的两个子类。我想为Animal指定一个ToJson方法,该方法适用于所有动物。我的问题是,当我调用dog.ToJson()时,我只获得dog的Dog属性,而没有Animal属性。如何使ToJson正常工作(即使用递归)?编辑:更改代码以反映lbonn回答中的建议,但我无法按照我的意愿进行工作。edit2:代码更改后问题的一致性package mainimport (    "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}}
查看完整描述

2 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

在这里,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常见问题解答对此提供了一些很好的说明。


查看完整回答
反对 回复 2021-05-24
  • 2 回答
  • 0 关注
  • 271 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信