Maison >développement back-end >Golang >Pourquoi la modification des valeurs à l'aide du mot-clé « range » de Go échoue-t-elle et comment les indices de tableau peuvent-ils fournir une solution ?
L'utilisation des indices de tableau sur des valeurs de plage
Lors de l'utilisation du mot-clé range avec des tableaux ou des tranches dans Go, il est essentiel de comprendre qu'il renvoie la clé et une copie de la valeur, pas la référence de valeur d'origine. Ce comportement peut prêter à confusion lorsque vous tentez de modifier des valeurs au sein de la collection au cours de l'itération.
Dans l'exemple fourni :
package main import "fmt" type MyType struct { field string } func main() { var array [10]MyType for _, e := range array { e.field = "foo" } for _, e := range array { fmt.Println(e.field) fmt.Println("--") } }
Il est prévu que l'itération de plage attribue la chaîne "foo" à le champ de chaque élément du tableau. Cependant, lorsque la deuxième boucle imprime les valeurs mises à jour, tous les champs restent vides. Cela est dû à la sémantique de range basée sur la copie.
Pour modifier efficacement les valeurs dans le tableau pendant l'itération, il est nécessaire d'utiliser l'index du tableau au lieu de la variable de plage :
package main import "fmt" type MyType struct { field string } func main() { var array [10]MyType for idx, _ := range array { array[idx].field = "foo" } for _, e := range array { fmt.Println(e.field) fmt.Println("--") } }
Cette modification garantit que la variable d'index fait référence à l'élément réel du tableau, permettant des mises à jour de champ appropriées et une sortie correcte dans la deuxième boucle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!