ホームページ > バックエンド開発 > Golang > Go の逆参照演算子は、元の構造体のコピーまたは参照を作成しますか?

Go の逆参照演算子は、元の構造体のコピーまたは参照を作成しますか?

Barbara Streisand
リリース: 2024-11-28 12:29:10
オリジナル
226 人が閲覧しました

Does Go's Dereference Operator Create a Copy or a Reference to the Original Struct?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート