私はGoで継承を使用しようとしていますが、継承は(私が知る限り)技術的にはサポートされていませんが、匿名フィールドを使用して同様の機能を得ることができます。ここで'parent'構造体を受け入れる関数に 'child'構造体を渡す方法は?
は、私は2つの構造体全体では「継承」を定義しています方法は次のとおりです。
//Parent struct:
type FSEntity struct {
guid GUIDNumber
}
//Child struct:
type DataBlock struct {
FSEntity
data []byte
}
私は今、親構造体FSEntity
のインスタンスを受け入れるようになっている、次のように定義された関数、持っている:
Put(entity FSEntity) {....}
しかし、私はそうのような上Put
関数に(継承によってもFSEntity
である)DataBlock
のインスタンスを渡してみてください。
guidNumber := GUIDNumber(1234)
value := []byte("sample string")
dataBLock := DataBlock{FSEntity{guidNumber}, value}
Put(dataBLock)
、私はこのエラーを取得する:
cannot use dataBLock (type DataBlock) as type FSEntity in argument to Put
は、どのように私はこれを解決するのですか?
説明をありがとう。だから、Goには適切な継承を使用する方法はありません。私が望む機能は 'Put()'の中にあったため、BOTHクラスの変数にアクセスすることができました。単にPut(dataBLock.FSEntity)を実行すれば可能になりません – Ahmad
@Ahmadあなたの両方の構造体の変数にアクセスできるようにするには、 'Put'の定義を更新しなければならないので、引数は' DataBlock'型です。 Goには継承はありません。あなたは少し違って問題について考える必要があります。多態性が言語のコンセプトとして存在しないときは、それを活用しようとしています。そのタイプの動的な振る舞い(いくつかの共通の動作/フィールド/ ectを持つと思われる多くの型を含むコレクションなど)が必要な場合は、それをインタフェースの背後で抽象化します。 – evanmcdonnal