2017-07-21 47 views
0

我剛開始學習Go,我來自OOP的背景。迭代不同類型的多個數組的最佳方法

因此,例如,說我有三個結構如下所示:

type Parent struct { 

} 

type Foo struct { 
    *Parent 
} 

type Bar struct { 
    *Parent 
} 

的Foo和Bar結構都擴展父。如果我有一個Foo的數組,以及一個Bar的數組,有沒有辦法將它們合併成單個數組/片段Parent

如果不是,那麼如果我知道我只會訪問從Parent繼承的屬性,那麼一次迭代兩個數組的最佳方式是什麼?

+0

Go中沒有繼承,所以不可能有「Foo和Bar結構都擴展Parent」。你能澄清你的意思嗎? – Adrian

+0

@Adrian嗯,我知道這不是繼承,但我不知道還有什麼可以稱之爲繼承。當我使用提供的語法時,雖然它看起來像繼承一樣。即'Parent'的屬性可以從'Foo'訪問。 – chrispytoes

+0

它被稱爲嵌入,重要的是不要將其與繼承混淆,尤其是因爲它不允許您描述的那種行爲。 – Adrian

回答

3

Go不支持繼承,它支持的唯一多態是接口。示例代碼中的內容稱爲嵌入,它不提供多態;如果在Foo中嵌入Parent,則不允許您將Foo類型的值分配給Parent類型的變量或片。

最接近你所描述的就是使用接口。如果Parent實現了某個接口(假設爲Baz),那麼在FooBar中嵌入Parent意味着兩者都將實現相同的接口。這反過來意味着您可以使用接口類型[]Baz,您可以將ParentFooBar類型的值放入其中。請注意,接口只能指定方法,而不能指定字段,因此使用接口類型的值時,只能訪問接口的方法,而不能訪問ParentFooBar中可能指定的任何字段。

+0

好吧,現在有道理,謝謝。 – chrispytoes

相關問題