gpt4 book ai didi

inheritance - GoLang 等效于使用接口(interface)与数据和成员函数的继承

转载 作者:数据小太阳 更新时间:2023-10-29 03:30:42 26 4
gpt4 key购买 nike

我是一个 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
}

现在我想做以下事情:

  1. 以某种方式将 'data DatumType' 与 base 保持一致,这样查看 base 的定义就可以知道哪些数据是通用的所有结构。
    1. 在一个地方实现 common_func(),这样派生结构就不需要这样做了。

我尝试用接口(interface)实现函数,但编译失败。我试图创建一个结构并从中继承,但没有找到好的方法来做到这一点。有一些干净的出路吗?

最佳答案

Go 没有继承。相反,它提供了 embedding 的概念.

在这种情况下,您不需要/不想将 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

关于inheritance - GoLang 等效于使用接口(interface)与数据和成员函数的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30816630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com