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

Pourquoi ne puis-je pas modifier directement les valeurs dans une boucle Go Range sur une tranche Struct ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-20 17:21:14219parcourir

Why Can't I Directly Modify Values in a Go Range Loop Over a Struct Slice?

Pourquoi est-il impossible de modifier des valeurs dans une plage de structure de type ?

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!

Déclaration:
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