Maison > développement back-end > Golang > Comment mettre à jour les valeurs de structure imbriquées dans Go ?

Comment mettre à jour les valeurs de structure imbriquées dans Go ?

Susan Sarandon
Libérer: 2024-12-05 14:46:10
original
221 Les gens l'ont consulté

How to Update Nested Struct Values in Go?

Mise à jour des valeurs de structure dans Go

Dans Go, les structures sont des types de valeur, ce qui signifie que l'attribution d'une structure à une autre copie ses valeurs plutôt que créer une référence. Cela peut entraîner un comportement inattendu lorsque vous essayez de modifier des valeurs dans une structure imbriquée.

Considérez l'extrait de code suivant :

ftr := FTR{}

err := yaml.Unmarshal([]byte(yamlFile), &ftr)

for index, element := range ftr.Mod {
    switch element.Type {
    case "aaa", "bbbb":
        element.Type = "cccc"
    case "htr":
        element.Type = "com"
    case "no":
        element.Type = "jnodejs"
    case "jdb":
        element.Type = "tomcat"
    }
}
Copier après la connexion

L'intention est de mettre à jour le champ Type de chaque élément Mod dans la structure ftr basée sur une série de conditions. Cependant, une fois le code exécuté, le champ Type de chaque élément reste inchangé.

Ce comportement est dû au fait que la boucle de plage parcourt une copie de la tranche ftr.Mod. Par conséquent, toutes les modifications apportées à la variable d'élément dans la boucle ne sont pas reflétées dans la tranche ftr.Mod d'origine.

Pour résoudre ce problème et mettre à jour correctement les valeurs dans la structure ftr, vous pouvez utiliser une itération basée sur l'index. au lieu de s'étendre sur la tranche. Cela vous permet de modifier les valeurs directement dans la tranche d'origine :

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"
    }
}
Copier après la connexion

En itérant sur les indices de la tranche ftr.Mod et en modifiant directement les éléments correspondants, vous vous assurez que la structure ftr d'origine est mise à jour comme prévu.

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