Utilisation d'indices de tableau pour la modification d'éléments au lieu de valeurs de plage
Dans la programmation Go, le mot-clé range parcourt une collection et renvoie à la fois la clé et la copie de la valeur de chaque élément. Ce comportement peut gêner la modification des valeurs au sein de la boucle. L'exemple suivant illustre ce problème :
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("--") } }
Dans ce code, nous tentons de modifier le champ de chaque élément du tableau à l'aide d'une boucle de plage. Cependant, puisque la plage renvoie une copie de la valeur, les éléments réels du tableau restent inchangés. Cela fait que toutes les valeurs de champ restent vides.
Solution : Utilisation d'indices de tableau
Pour contourner ce problème et modifier les éléments réels, vous devez utiliser des indices de tableau au lieu de les valeurs renvoyées par la boucle de plage. Voici le code modifié :
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("--") } }
En utilisant l'index de chaque élément au lieu de la valeur, nous pouvons directement accéder et modifier les éléments réels du tableau. Cela garantit que les valeurs des champs sont correctement mises à jour.
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!