Maison >développement back-end >Golang >Pourquoi les valeurs de structure ne sont-elles pas mises à jour pendant l'itération dans Go ?

Pourquoi les valeurs de structure ne sont-elles pas mises à jour pendant l'itération dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-09 13:14:15789parcourir

Why are Struct Values Not Updated During Iteration in 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!

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