範囲値の代わりに要素の変更に配列インデックスを使用する
Go プログラミングでは、range キーワードはコレクションを反復処理し、両方のキーを返しますそして各要素の値のコピー。この動作により、ループ内での値の変更が妨げられる可能性があります。次の例は、この問題を示しています。
package main import "fmt" type MyType struct { field string } func main() { var array [10]MyType // Attempt to modify field using range values: for _, e := range array { e.field = "foo" } // Verify that field hasn't been modified: for _, e := range array { fmt.Println(e.field) fmt.Println("--") } }
このコードでは、範囲ループを使用して配列内の各要素のフィールドを変更しようとしています。ただし、範囲は値のコピーを返すため、配列内の実際の要素は変更されません。これにより、すべてのフィールド値が空のままになります。
解決策: 配列インデックスの使用
この問題を回避して実際の要素を変更するには、代わりに配列インデックスを使用する必要があります。範囲ループによって返される値。変更されたコードは次のとおりです。
import "fmt" type MyType struct { field string } func main() { var array [10]MyType // Modify field using array indices: for idx, _ := range array { array[idx].field = "foo" } // Verify that field has been modified: for _, e := range array { fmt.Println(e.field) fmt.Println("--") } }
値の代わりに各要素のインデックスを使用することで、配列内の実際の要素に直接アクセスして変更できます。これにより、フィールド値が正しく更新されます。
以上がGo の range キーワードを使用すると配列要素を変更できないのはなぜですか? 配列インデックスはどのように解決策を提供できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。