我刚刚开始学习Go,我来自OOP的背景。
例如,假设我有三个这样的结构:
type Parent struct {
}
type Foo struct {
*Parent
}
type Bar struct {
*Parent
}
Foo和Bar结构都扩展了Parent。如果我有Foo
的数组和Bar
的数组,有没有办法将它们合并到Parent
s的单个数组/切片中?
如果没有,那么如果我知道我只会访问从Parent
继承的属性,那么一次迭代两个数组的最佳方法是什么?
答案 0 :(得分:3)
Go不支持继承,它支持的唯一多态是接口。您在示例代码中得到的内容称为嵌入,它不提供多态性;如果您在Parent
中嵌入Foo
,则不允许您将Foo
- 类型值分配给Parent
- 类型变量或切片。
您最接近所描述的将使用接口。如果Parent
实现了一些界面(让我们说Baz
),那么在Parent
和Foo
中嵌入Bar
意味着两者都会实现相同的接口。这反过来意味着您可以拥有一个接口类型[]Baz
的切片,您可以在其中放置Parent
,Foo
或Bar
类型的值。请注意,接口只能指定方法,而不能指定字段,因此在使用接口类型的值时,您只能访问接口的方法,而不能访问Parent
中可能指定的任何字段, Foo
或Bar
。