我是一个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()
,以便派生的结构不需要这样做。我尝试用接口实现该功能,但编译失败。我试图创建一个结构并从中继承,但我没有找到好的方法来做到这一点。有一些干净的出路吗?
答案 0 :(得分:3)
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
的字段:
$suppress_localhost = true;
答案 1 :(得分:2)
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.