Go での埋め込み: ポインターを使用する場合
構造体を別の構造体内に埋め込む場合、ポインターを使用するか値を使用するかの決定は異なります。
値の使用
値による構造体の埋め込みとは、埋め込まれた構造体のコピーが、それを含む構造体内に格納されることを意味します。これは、次のような状況に適しています。
<code class="go">type Job struct { Command string log.Logger }</code>
ポインタの使用
ポインタによって構造体を埋め込むと、含まれる構造体の複数のインスタンス間でメモリを共有できます。これは次の場合に役立ちます。
<code class="go">type Job struct { Command string *log.Logger }</code>
ポインターによる埋め込みの利点
「ポインターによる埋め込み」という用語は、Eric Urban (「水素 18」) によって作られました。これには、次のような利点があります。
ポインターによる埋め込みを使用したフライウェイト パターン
ビットマップ構造体へのポインターを埋め込むことで、複数のレンダラ構造体が同じ基礎となるビットマップ データを共有できるため、メモリ消費が削減され、ランタイムが有効になります。
<code class="go">type Bitmap struct{ data [4][5]bool } type Renderer struct{ *Bitmap //Embed by pointer on uint8 off uint8 }</code>
ポインターによる埋め込みの制限
匿名フィールドにはメソッドがないため、ポインターへのポインターやインターフェイス型へのポインターを持つことはできません。 。この制限は、インターフェイスへのポインターの誤った使用を防止し、言語の一貫性を維持することを目的としています。
以上がGo への埋め込み: ポインタと値をいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。