Maison >développement back-end >Golang >Pourquoi les valeurs de structure ne sont-elles pas mises à jour pendant l'itération dans Go ?
Comment mettre à jour efficacement les valeurs de structure pendant l'itération
Dans cet extrait de code, nous avons une structure FTR avec un tableau de structures Mod. Notre objectif est de mettre à jour le champ Type des éléments Mod en fonction de critères spécifiques au sein d'une boucle. Cependant, il semble que les modifications apportées dans la boucle ne soient pas reflétées dans la structure FTR une fois la boucle terminée.
Le problème
Le cœur du problème réside dans le fait que lorsque vous parcourez une tranche ou un tableau à l'aide du mot-clé range, vous obtenez uniquement une copie de l'élément, pas une référence à l'élément d'origine. Cela signifie que toutes les modifications que vous apportez à l'élément dans la boucle n'affecteront que la copie, laissant l'élément d'origine inchangé.
Solution : Itérer avec des indices
Pour correctement mettre à jour les éléments de la structure, nous devons parcourir leurs index et modifier les éléments d'origine plutôt que leurs copies. Voici le code corrigé :
type FTR struct { Id string Mod []Mod } for index := range ftr.Mod{ switch ftr.Mod[index].Type { case “aaa”, “bbbb”: ftr.Mod[index].Type = "cccc” case "htr”: ftr.Mod[index].Type = "com" case "no": ftr.Mod[index].Type = "jnodejs" case "jdb”: ftr.Mod[index].Type = "tomcat" } }
Dans ce code mis à jour, nous parcourons les indices du tableau Mod et modifions le champ Type directement sur la structure FTR d'origine. Ce faisant, nous garantissons que les modifications apportées dans la boucle sont conservées une fois la boucle terminée.
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!