使用具有数据和成员函数的接口进行继承的 GoLang 等效项

我是一个 golang 新手,所以如果我遗漏了一些明显的东西,请原谅我。我有以下结构:


type base interface {

    func1()

    func2()

    common_func()

}


type derived1 struct {

    base // anonymous meaning inheritence

    data DatumType

}


type derived2 struct {

    base // anonymous meaning inheritence

    data DatumType

}

现在我想做以下事情:


以某种方式保留 ' data DatumType'base以便查看定义base可以知道所有结构共有哪些数据。

common_func()在一个地方实现,这样派生的结构就不需要这样做了。

我尝试使用接口实现该功能,但编译失败。我试图创建一个结构并从中继承,但没有找到好的方法来做到这一点。有什么干净的出路吗?


qq_笑_17
浏览 164回答 2
2回答

SMILET

Go 中没有继承。使用成分:type common struct {    data DatumType}func (c *common) commonFunc() {    // Do something with data.}type derived1 struct {    common    otherField1 int}// Implement other methods on derived1.type derived2 struct {    common    otherField2 string}// Implement other methods on derived2.

动漫人物

Go 没有继承。相反,它提供了嵌入的概念。在这种情况下,您不需要/不想定义base为interface. 使其成为结构并将函数定义为方法。然后嵌入base到您的派生结构中将为它们提供这些方法。type base struct{    data DatumType     }func (b base) func1(){}func (b base) func2(){}func (b base) common_func(){}type derived1 struct {    base // anonymous meaning embedding}type derived2 struct {    base // anonymous meaning embedding}现在你可以这样做:d := derived1{}d.func1()d.func2()d.common_func()并且(正如 David Budworth 在评论中指出的那样)您可以base通过引用它的类型名称来访问字段,如下所示:d.base.data = something
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go