Maison >développement back-end >Golang >Pourquoi ne puis-je pas modifier directement les valeurs dans une boucle Go Range sur une tranche Struct ?
Cette requête de programmation découle de l'incapacité de modifier les valeurs dans une plage d'un type structuré dans le langage de programmation Go. Comprendre ce problème nécessite un examen plus approfondi du fonctionnement des tranches et des plages dans Go.
Malgré votre méthode initiale de chargement des données dans le tableau chartRecords, la modification des valeurs dans la boucle ne semble avoir aucun effet. La sortie, au lieu de refléter les valeurs modifiées, conserve les valeurs d'origine.
La confusion vient de la façon dont Go gère les tranches et les plages. Pour une clause range dans une instruction for, Go attribue des valeurs d'itération aux variables d'itération correspondantes, mais ces modifications ne sont appliquées que dans le bloc. Ces variables d'itération sont des copies, et non des références aux éléments de tranche d'origine.
Pour apporter des modifications permanentes aux éléments de tranche, les valeurs modifiées de la variable d'itération doivent être explicitement réaffectées à la tranche. Voici le code mis à jour :
for i, elem := range chartRecords { elem.Count = modMe(mod, i) chartRecords[i] = elem }
Dans cette boucle modifiée, les valeurs modifiées dans la variable d'itération elem sont réaffectées dans les enregistrements de diagramme de tranche d'origine, garantissant que les modifications sont persistantes.
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!