ホームページ >バックエンド開発 >Golang >Go でポインターを逆参照しても元の構造体が更新されないのはなぜですか?

Go でポインターを逆参照しても元の構造体が更新されないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-01 00:26:10866ブラウズ

Why Doesn't Dereferencing a Pointer in Go Update the Original Struct?

Go でのポインタの逆参照

Go では、ポインタの逆参照には、ポインタが指すメモリ アドレスに格納されている値へのアクセスが含まれます。 variable.

問題:

Go チュートリアルで提供されている例では、ポインターの逆参照の予期された動作が発生しません。ポインター変数を使用して構造体の値を変更する場合、その変更は構造体の間接参照コピーには反映されません。

説明:

t := * q 操作は、q が指す構造体のコピーを作成します。その後 q に加えられた変更は t には影響しません。 Go はポインタを値として扱い、代入はコピー操作であるため、この動作は予期されています。

t の q を通じて行われた変更を観察するには、値をコピーするのではなく、構造体へのポインタを維持する必要があります。これは、代わりに q を t に代入することで実現できます。

t := q

C/C 比較:

Go でのポインタ参照解除の動作は C/ での動作と似ています。 C.どちらの言語でも、ポインターは値のアドレスを格納し、ポインターを逆参照することで実際の値にアクセスできます。ただし、Go ではポインターへの代入はコピーされた値になりますが、 C/C では参照された値を直接変更します。

以上がGo でポインターを逆参照しても元の構造体が更新されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。