我是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常见问题解答对此提供了一些很好的说明。
- 2 回答
- 0 关注
- 271 浏览
添加回答
举报
0/150
提交
取消