Go では、同じ名前を持つ複数の構造体を埋め込むと問題が発生し、重複フィールド エラーが発生する可能性があります。この記事では、このような競合を発生させずに構造体を効果的に埋め込むことができる、このシナリオの解決策を検討します。
問題ステートメント
次のコード スニペットを考えてみましょう:
<code class="go">type datastore struct { *sql.Store *file.Store }</code>
このコードは、同じ名前 Store を持つ 2 つの構造体 *sql.Store と *file.Store をデータストア構造体内に埋め込もうとします。ただし、コンパイラは 2 つの埋め込みフィールドを区別できないため、重複フィールド エラーが発生します。
解決策
この問題を解決するには、以下を利用できます。埋め込み構造体の 1 つの型エイリアス。これにより、参照される型の代替名が作成され、名前の競合を引き起こすことなく他の構造体と一緒に埋め込むことができます。
<code class="go">type SqlStore = sql.Store // this is a type alias type datastore struct { *SqlStore *file.Store }</code>
このシナリオでは、SqlStore は sql.Store のエイリアスになり、新しい名前が導入されます。同じ種類の名前。その結果、SqlStore と file.Store の両方をデータストア内に埋め込むと、それらは個別のフィールドとして認識され、重複フィールド エラーが排除されます。
型エイリアスを使用する利点
型エイリアスを使用すると、次のことが可能になります。
代替アプローチ
同じ名前の構造体を埋め込む必要がない場合は、次のオプションを検討することもできます。
以上が同じ名前を持つ複数の構造体を Go に埋め込むにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。