ホームページ >バックエンド開発 >Golang >Go の Range ループで値を変更しても元の配列が変更されないのはなぜですか?

Go の Range ループで値を変更しても元の配列が変更されないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-18 04:04:09737ブラウズ

Why Doesn't Modifying Values in Go's Range Loop Change the Original Array?

値の代わりに範囲参照

Go では、range キーワードは配列やスライスなどのシーケンスを反復処理し、アクセスを提供します。各要素のキー (インデックス) と値の両方に適用されます。ただし、パフォーマンス上の理由から、range キーワードは元の値のコピーに対して動作します。これは、range によって返された値に加えられた変更は元の配列には反映されないことを意味します。

次のコードを考えてみましょう:

このコードを実行すると、最初の範囲ループ内の e.field に加えられた変更が次のとおりであるため、すべての要素に対して「000000」が出力されます。コピーに適用され、配列内の元の値には影響しません。

解決策

範囲ループを使用して配列の値を変更するには、以下を使用する必要があります。 range によって返される値の代わりに、配列インデックス。これは、範囲ループで _ プレースホルダーを使用してインデックスをキャプチャすることで実現できます。

この変更されたコードは、配列内のすべての要素のフィールドの値を正常に変更し、それぞれの要素に対して "foo" を出力します。要素。

以上がGo の Range ループで値を変更しても元の配列が変更されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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