迭代不同类型的多个数组的最佳方法

时间:2017-07-21 16:42:41

标签: go

我刚刚开始学习Go,我来自OOP的背景。

例如,假设我有三个这样的结构:

type Parent struct {

}

type Foo struct {
    *Parent
}

type Bar struct {
    *Parent
}

Foo和Bar结构都扩展了Parent。如果我有Foo的数组和Bar的数组,有没有办法将它们合并到Parent s的单个数组/切片中?

如果没有,那么如果我知道我只会访问从Parent继承的属性,那么一次迭代两个数组的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

Go不支持继承,它支持的唯一多态是接口。您在示例代码中得到的内容称为嵌入,它不提供多态性;如果您在Parent中嵌入Foo,则不允许您将Foo - 类型值分配给Parent - 类型变量或切片。

您最接近所描述的将使用接口。如果Parent实现了一些界面(让我们说Baz),那么在ParentFoo中嵌入Bar意味着两者都会实现相同的接口。这反过来意味着您可以拥有一个接口类型[]Baz的切片,您可以在其中放置ParentFooBar类型的值。请注意,接口只能指定方法,而不能指定字段,因此在使用接口类型的值时,您只能访问接口的方法,而不能访问Parent中可能指定的任何字段, FooBar