構造体の埋め込み: ポインターを優先する場合
ある構造体を別の構造体内に埋め込む場合、ポインターを使用するか、埋め込み値を使用するかの 2 つのオプションがあります。 。この決定を行うには、仕様を理解し、それぞれのアプローチの利点を考慮することが重要です。
ポインタと埋め込み値
Go の仕様によれば、匿名フィールド (埋め込みフィールドとも呼ばれる) は、型名または非インターフェイス型名へのポインターとして宣言できます。つまり、次の例では、Logger フィールドに log.Logger 型を使用するか、ポインタ *log.Logger を使用するかを選択できます。
<code class="go">type Job struct { Command string *log.Logger }</code>
ポインタの利点
Eric Urban による記事「Embedding in Go」では、「embed by-pointer」と呼ばれるポインターの埋め込みの利点を強調しています。これらには以下が含まれます:
ポインタ埋め込みの例
<code class="go">type Bitmap struct{ data [4][5]bool } type Renderer struct{ *Bitmap //Embed by pointer on uint8 off uint8 }</code>
この例では、レンダラー タイプは次の方法でビットマップを埋め込みます。ポインタ。これは、Renderer の複数のインスタンスが Bitmap の 1 つのインスタンスを共有し、その動作を個別にカスタマイズできることを意味します。
技術的な制限
ポインターからポインターを使用できないことに注意することが重要です。または、匿名フィールドとしてのインターフェイスへのポインタ。この制限は、これらの型にはメソッドがないという事実から生じており、これは埋め込みの重要な側面です。メソッドは埋め込み型から埋め込み型に昇格され、直接アクセスできるようになります。
以上がGo に構造体を埋め込む場合: ポインターまたは埋め込み値?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。