Go 逆参照: コピーするかどうか、それが問題です
逆参照演算子 (*) を使用して Go 構造体にアクセスする場合、ユーザーは結果は構造体の新しいコピーなのか、それとも元の構造体への参照なのか疑問です。 object.
動作を理解する
提供されたコード スニペットでは、
type me struct { color string total int } func study() *me { p := me{} return &p } obj := *study()
study() は me 構造体へのポインターを返します。 obj で逆参照すると、構造体のコピーが作成されます。これは、&p.color と &obj.color のメモリ アドレスが異なることから明らかです。
逆参照された構造体 obj は元の構造体と同じメモリ アドレスを持つと期待されるかもしれませんが、そうではありません。このインスタンス。この動作は、スコープの終わりで Go が自動的に変数の割り当てを解除することに起因すると考えられます。
実際に参照である場合
参照動作を実現するには、
obj := study()
を使用して構造体への直接ポインタを使用します。この場合、obj は元の me へのポインタになります。
結論
Go で構造体を逆参照する場合、結果が次のようになることを理解することが重要です。構造体へのポインタが明示的に割り当てられていない限り、元の構造体のコピー。この動作により、逆参照された構造体に加えられた変更が元の構造体に影響を与えず、カプセル化と変数の独立性が維持されます。
以上がGo の逆参照演算子は、元の構造体のコピーまたは参照を作成しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。