Maison > développement back-end > Golang > Pourquoi ne puis-je pas modifier les valeurs de structure directement dans une boucle Go Range ?

Pourquoi ne puis-je pas modifier les valeurs de structure directement dans une boucle Go Range ?

Linda Hamilton
Libérer: 2024-12-26 19:01:09
original
646 Les gens l'ont consulté

Why Can't I Modify Struct Values Directly Within a Go Range Loop?

Comprendre les variables de plage dans Go

Q : Pourquoi ne puis-je pas modifier les valeurs dans une plage de structure de type ?

Dans Go, le concept de tranches et de plages peut prêter à confusion pour les nouveaux arrivants. Une instruction range parcourt les éléments d’une collection, en les attribuant à des variables d’itération. Cependant, dans le cas d'une structure, la modification de ces variables ne modifie pas les valeurs d'origine.

A : Attribution de variables d'itération

La spécification du langage de programmation Go indique que pour Avec une clause range, les variables d'itération se voient attribuer les valeurs de chaque élément de la collection. Cependant, ces variables ne sont que locales au corps de la boucle.

Modification des variables d'itération

Lorsque vous modifiez une variable d'itération dans une boucle, vous ne modifiez pas réellement l'originale. valeur dans la collection. Au lieu de cela, vous créez une nouvelle copie de la valeur et l'attribuez à la variable d'itération.

Solution : attribution de valeurs modifiées

Pour modifier les valeurs d'origine dans la collection , vous devez réattribuer les variables d'itération modifiées à la collection d'origine. Dans l'exemple de code, la variable d'itération modifiée pour elem.Count doit être réattribuée à chartRecords[i].

Code mis à jour

Voici le code mis à jour avec la modification nécessaire :

for i, elem := range chartRecords {
    elem.Count = modMe(mod, i)
    chartRecords[i] = elem
    fmt.Printf("No: %2d | Count: %2d | Name = %s\r\n", i, elem.Count, elem.Name)
}
Copier après la connexion

Cette modification garantit que la valeur elem.Count modifiée est correctement réattribuée aux chartRecords tranche.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal