埋め込み: ポインターと値参照を使用する場合
Golang で 1 つの構造を別の構造内に組み込む場合、ポインタまたは値参照。次のコード スニペットを考えてみましょう:
<code class="go">type Job struct { Command string *log.Logger }</code>
この例では、ポインターで表される *log.Logger 型をジョブ構造内に埋め込みました。あるいは、次のように値参照を利用することもできます。
<code class="go">type Job struct { Command string log.Logger }</code>
どちらのアプローチでも埋め込みを実現しますが、その意味は異なります。 Go 仕様によれば、埋め込みフィールドは型自体、または非インターフェイス型へのポインタのいずれかをサポートします。重要なのは、埋め込み型をポインター型にすることはできません。
「ポインターによる埋め込み」として知られるポインターの埋め込みには、特定の利点があります。まず、構造体が初期化されて参照によって返される、NewX パターンに従う関数を利用できるようになります。次に、実行時にさまざまなインスタンスを埋め込み型に動的に割り当てることができます。
たとえば、次のコードを考えてみましょう。
<code class="go">type Bitmap struct{ data [4][5]bool } type Renderer struct{ *Bitmap //Embed by pointer on uint8 off uint8 }</code>
この例では、レンダラー タイプは次の方法でビットマップを埋め込みます。参照。これにより、Bitmap の 1 つのインスタンスが、それぞれ独自の文字セットを持つ複数の Renderer インスタンスの埋め込みインスタンスとして機能することができます。このコードの出力は、複数のレンダラーが同じ基礎となるデータ構造上でどのように動作できるかを示しています。
OXXO OXOO OXOO OXOO .@@. .@.. .@.. .@..
対照的に、値参照の埋め込みにはこれらの利点はありません。ただし、メソッドにアクセスするために埋め込み型をインスタンス化する必要はありません。最終的に、ポインターを使用するか値参照を使用するかの決定は、アプリケーションの特定の要件と埋め込みフィールドに必要な動作によって決まります。
以上がGo の埋め込みフィールドに対してポインターと値の参照を使用する場合は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。