構造体型をポインターとして使用する場合 (つまり、ポインター レシーバーを使用すると、コンストラクターが A など)、構造体 (B として) を埋め込むか、そのポインター (B として) を埋め込むかの選択は、微妙ですが重要な結果をもたらします。
ゼロ値
2 つのオプションのゼロ値は大きく異なります。埋め込み B は、値が 0 の埋め込みオブジェクトを直接作成します。これにより、そのオブジェクトに対する即時操作が可能になります。<code class="go">type AObj struct { B } var aObj AObj aObj.Print() // Prints 0 (B's zero value)</code>
<code class="go">type APtr struct { *B } var aPtr APtr aPtr.Print() // Panics (nil pointer dereference)</code>
Copying
オブジェクトのコピー動作は、埋め込みタイプによって異なります。 B がオブジェクトとして埋め込まれている場合、コピー時に新しいオブジェクトが作成されます。<code class="go">type AObj struct { B } aObj2 := aObj aObj.X = 1 aObj2.Print() // Prints 0 (copy of B's zero value)</code>
<code class="go">type APtr struct { *B } aPtr.B = &B{} aPtr2 := aPtr aPtr.X = 1 aPtr2.Print() // Prints 1 (shared underlying B)</code>
以上が埋め込み構造体と構造体へのポインタ: ゼロ値とコピーはどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。