値の代わりに範囲参照
Go では、range キーワードは配列やスライスなどのシーケンスを反復処理し、アクセスを提供します。各要素のキー (インデックス) と値の両方に適用されます。ただし、パフォーマンス上の理由から、range キーワードは元の値のコピーに対して動作します。これは、range によって返された値に加えられた変更は元の配列には反映されないことを意味します。
例
次のコードを考えてみましょう:
このコードを実行すると、最初の範囲ループ内の e.field に加えられた変更が次のとおりであるため、すべての要素に対して「000000」が出力されます。コピーに適用され、配列内の元の値には影響しません。
解決策
範囲ループを使用して配列の値を変更するには、以下を使用する必要があります。 range によって返される値の代わりに、配列インデックス。これは、範囲ループで _ プレースホルダーを使用してインデックスをキャプチャすることで実現できます。
この変更されたコードは、配列内のすべての要素のフィールドの値を正常に変更し、それぞれの要素に対して "foo" を出力します。要素。
以上がGo の Range ループで値を変更しても元の配列が変更されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。