Récemment, alors que j'écrivais du code dans Golang, j'ai rencontré une erreur : "impossible d'attribuer à une variable de plage...". Cette erreur m'a beaucoup affligé car je ne savais pas comment la résoudre. Après quelques explorations et recherches, j'ai enfin trouvé la solution et maintenant je la partage avec vous.
Tout d’abord, examinons le scénario dans lequel cette erreur se produit. Dans Golang, nous utilisons généralement le mot-clé range pour itérer des éléments dans un conteneur (tels que des tableaux, des tranches, etc.). Lorsque nous souhaitons modifier les éléments pendant le processus d'itération, l'erreur "impossible d'attribuer à une variable de plage...". apparaîtra. Voici un exemple :
package main import "fmt" func main() { nums := []int{1, 2, 3, 4, 5} for _, num := range nums { num = num * 2 // 报错:“cannot assign to range variable num” } fmt.Println(nums) }
Dans cet exemple, nous voulons multiplier chaque élément en nombres par 2. Cependant, une erreur s'est produite lors du processus de compilation, "impossible d'attribuer à la variable num". C'est pourquoi Tissu en laine ?
La raison est que l'itération du mot-clé range dans Golang obtient une copie de l'élément, pas l'élément lui-même. Changer la copie dans le corps de la boucle ne modifie pas l'élément d'origine. Par conséquent, la modification de la valeur de num n’est pas valide et une erreur se produit.
Alors comment résoudre ce problème ? Il existe deux façons de résoudre ce problème.
Méthode 1 : Utiliser l'itération d'index
Nous pouvons utiliser l'index dans la boucle for pour itérer les éléments du conteneur, puis modifier la valeur de l'élément d'origine au lieu de modifier la valeur de la copie. Voici l'implémentation du code :
package main import "fmt" func main() { nums := []int{1, 2, 3, 4, 5} for i := range nums { nums[i] = nums[i] * 2 } fmt.Println(nums) }
Dans le code, nous utilisons i comme index pour parcourir les éléments du conteneur nums et modifier la valeur de nums[i]. De cette façon, la valeur de l'élément d'origine peut être modifiée avec succès et le résultat de sortie est [2 4 6 8 10].
Méthode 2 : Utiliser des pointeurs
Nous pouvons également utiliser des pointeurs vers des éléments pour résoudre ce problème. La valeur de l'élément d'origine peut être modifiée en passant un pointeur vers la copie itérée en tant que paramètre d'une fonction. Voici l'implémentation du code :
package main import "fmt" func double(num *int) { *num = *num * 2 } func main() { nums := []int{1, 2, 3, 4, 5} for i, num := range nums { double(&nums[i]) } fmt.Println(nums) }
Dans le code, nous définissons une fonction double dont le paramètre est un pointeur vers le type int. Dans la boucle for, nous parcourons les éléments du conteneur nums et passons le pointeur de la copie itérée à la fonction double, qui modifie la valeur de l'élément d'origine et la renvoie. De cette façon, la valeur de l'élément d'origine peut être modifiée avec succès et le résultat de sortie est [2 4 6 8 10].
Pour résumer, nous pouvons utiliser deux méthodes pour résoudre l'erreur "Impossible d'attribuer à la variable de plage..." dans Golang, à savoir en utilisant l'itération d'index et en utilisant des pointeurs. Il est nécessaire de choisir la méthode de résolution appropriée en fonction des besoins spécifiques de l’entreprise.
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!