Maison >développement back-end >Golang >Pourquoi mes mises à jour de structure ne sont-elles pas persistantes dans une boucle Go ?

Pourquoi mes mises à jour de structure ne sont-elles pas persistantes dans une boucle Go ?

DDD
DDDoriginal
2024-11-15 11:33:02612parcourir

Why Aren't My Struct Updates Persistent in a Go Loop?

La valeur de mise à jour dans la structure ne fonctionne pas

Malgré la manipulation des éléments dans une structure pendant les itérations de la boucle, les mises à jour ne parviennent pas à persister à la sortie de la boucle. Comprendre la raison derrière ce comportement est crucial pour une manipulation correcte de la structure.

Le problème

Lors d'une itération sur une tranche de structure, la variable de boucle fait référence à une copie de l'élément d'origine, et non à l'élément lui-même. . Ainsi, toute modification effectuée dans la boucle n'affecte que la copie et non l'élément réel dans la tranche.

La solution

Pour réussir la mise à jour des éléments struct, l'approche suivante peut être utilisée :

  • Itérer sur les indices au lieu de la tranche : En itérant sur les indices, un accès direct à l'élément struct réel est obtenu. Cela permet des modifications qui persistent au-delà de la boucle.
  • Éviter les pointeurs : Les pointeurs vers des tranches ou des éléments sont inutiles lors de la mise à jour des valeurs. La tranche est accessible directement et les éléments peuvent être mis à jour sans avoir besoin de pointeurs.

Voici un extrait de code mis à jour qui suit la solution :

type FTR struct {
    Id       string
    Mod      []Mod
}

type Mod struct {
    Name       string
    Type       string
}

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"
    }
}

En adoptant ceci approche, les éléments de la structure seront mis à jour avec succès et les modifications persisteront après la sortie de la boucle.

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