Maison > développement back-end > Golang > Comment la boucle de plage de tranches de Go affecte-t-elle l'attribution d'adresses dans les cartes ?

Comment la boucle de plage de tranches de Go affecte-t-elle l'attribution d'adresses dans les cartes ?

Mary-Kate Olsen
Libérer: 2024-12-03 07:06:09
original
289 Les gens l'ont consulté

How Does Go's Slice Range Loop Affect Address Assignment in Maps?

Comprendre le comportement des plages Go Slice

Dans Go, les tranches sont une structure de données fondamentale qui permet un stockage efficace et dynamique des éléments. Lorsque vous travaillez avec des tranches, il est essentiel de comprendre le comportement des boucles de plage.

Considérez l'extrait de code suivant :

type student struct {
    Name string
    Age  int
}

func main() {
    m := make(map[string]*student)
    s := []student{
        {Name: "Allen", Age: 24},
        {Name: "Tom", Age: 23},
    }

    for _, stu := range s {
        m[stu.Name] = &stu
    }
    fmt.Println(m)
    for key, value := range m {
        fmt.Println(key, value)
    }
}
Copier après la connexion

Le code définit une tranche de structures d'étudiant et une carte. Il parcourt la tranche à l'aide d'une boucle de plage, où chaque élément est affecté à la variable « stu ». Cependant, le comportement inattendu observé est que toutes les entrées de la carte pointent vers la même adresse dans la tranche.

Cause fondamentale :

Le problème provient de l'affectation de la boucle de plage. à la variable 'stu.' Lorsque la boucle itère, 'stu' se voit attribuer une copie de l'élément slice à cet index. En conséquence, toutes les entrées de la carte font référence à la même valeur copiée.

Solution :

Pour résoudre ce problème, le code doit explicitement prendre l'adresse de chaque tranche élément avant de le stocker dans la carte :

for i := range s {
    m[s[i].Name] = &s[i]
}
Copier après la connexion

En effectuant cette modification, chaque entrée de la carte fait désormais référence à l'adresse réelle de l'élément slice, garantissant le comportement attendu. Cela démontre l'importance de comprendre les nuances des boucles de plage de tranches et comment elles peuvent affecter la manipulation des données dans Go.

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