構造体内に同一の名前を持つ構造体を埋め込む
この質問は、同じ名前を持つ 2 つの構造体を 1 つの構造体に埋め込むことに焦点を当てています。通常、これを行おうとすると、次のコード スニペットに示すように、重複フィールド エラーが発生します。
type datastore struct { *sql.Store *file.Store }
ソリューションとしてエイリアスを入力
これを回避するにはこの問題については、型エイリアスを使用することが推奨される解決策です。埋め込み構造体の 1 つに代替名を割り当てることにより、Go コンパイラは 2 つのインスタンスを区別します。次の変更されたコードを考えてみましょう:
type SqlStore = sql.Store // this is a type alias type datastore struct { *SqlStore *file.Store }
このシナリオでは、SqlStore は元の sql.Store 型のエイリアスとして機能します。したがって、データストア内の埋め込みフィールドは *SqlStore と *file.Store として区別されるようになり、重複フィールドの競合が効果的に解決されます。
型エイリアスの利点
とは異なります従来の型宣言では、型エイリアスは別個の新しい型を導入しません。代わりに、既存の型の代替名を作成するだけです。その結果、元の型の動作と特性が維持されます。型エイリアスを利用することで、開発者は外部コードとの互換性を維持しながら、基礎となる実装の変更を回避できます。
代替オプション
型エイリアスとは別に、いくつかの代替アプローチがあります。目的の機能を実現するには:
以上が同じ名前の構造体を Go 構造体に埋め込む方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。