2017-07-21 2 views
0

私はちょうど学習を始めました。私はOOPの背景から来ています。異なるタイプの複数の配列を繰り返し処理する最適な方法

したがって、たとえば、私はそうのような3つの構造体を持っていると言う:

type Parent struct { 

} 

type Foo struct { 
    *Parent 
} 

type Bar struct { 
    *Parent 
} 

fooとbar構造体は、親を拡張し、両方。 Fooの配列とBarの配列を持っている場合、これらを単一の配列/スライスParentにマージする方法はありますか?

もし私がParentから継承したプロパティにのみアクセスすることがわかっているなら、2つの配列を一度に繰り返し処理する最良の方法は何ですか?

+0

Goには継承がないため、「FooとBarの両方の構造体を拡張する」ことはできません。これで何を意味するのかを明確にすることはできますか? – Adrian

+0

@Adrianええ、私はそれが継承ではないことを知っていますが、他に何を呼び出すべきかは分かりません。提供された構文を使用すると、継承のように動作するようです。すなわち、「親」のプロパティは、「Foo」からアクセス可能である。 – chrispytoes

+0

これは埋め込みと呼ばれ、継承と混同しないようにすることが重要です。特に、記述しているような振る舞いを許さないためです。 – Adrian

答えて

3

Goは継承をサポートしておらず、サポートするポリモーフィズムはインターフェイスのみです。サンプルコードでは、埋め込みと呼ばれるものは多態性を提供しません。 ParentFooに埋め込むと、Parentタイプの変数またはスライスにFooタイプの値を割り当てることはできません。

あなたが話すところに最も近いのは、インターフェイスを使用することです。 Parentがインタフェースを実装している場合(Bazとする)、ParentFooBarに埋め込むことは、両方とも同じインタフェースを実装することを意味します。これはつまり、タイプParentFoo、またはBarの値を入れることができるインターフェイスタイプ[]Bazのスライスを持つことができることを意味します。インターフェイスはメソッドではなくフィールドしか指定できないので、インターフェイスタイプの値を使用する場合は、ParentFoo、またはBarで指定できるフィールドではなく、インターフェイスのメソッドにのみアクセスできます。

+0

それは今や意味がある、ありがとう。 – chrispytoes

関連する問題