就像其他人所说的,忘记继承,Go的继承是有充分理由的。因此,不要再对父母和孩子进行思考。Go具有成分(您在此处使用的成分),但是其行为有所不同。您可以在Go中使用接口,以传递Child和Child2,并使接收者对接收的对象无动于衷(只要它具有相同的功能)。但是,这可能是一个错误,因为您试图重新创建您在Go中熟悉的继承。不要那样做
如果您的类型是这样相关的,则您可能应该从接受要修改的类实例的嵌入式类中退后一步。嵌入式类应该对自己的字段起作用,仅此而已-
它将关注区分开,并使用作用于其上的方法保存数据。因此,不要考虑父母和孩子,而要考虑要共享的一些代码/数据。
考虑经典的继承问题“动物-
猫和狗”。有了继承,您将拥有一只猫和一条狗以及一个抽象的基类动物。Animal可能具有您期望的所有方法,然后您可能在Animal上写了一个Say()方法,该方法什么也没说,而Say()则向猫叫,而Say()则使猫和狗叫起来。
在Go语言中,您只需拥有Cats and
Dogs,并在每个对象上使用不同的Say()方法,它们都符合别人定义的Speaker()接口。为了分享一些行为,宁愿重复一些代码而不是大量额外的代码和复杂性。
请务必阅读“
有效的Go”并尝试使用可用的工具,而不是重新创建您熟悉的继承之类的工具。



