Maison > développement back-end > Golang > Pourquoi les boucles Go Slice Range attribuent-elles la même adresse aux touches de carte lors de l'utilisation de « &stu » ?

Pourquoi les boucles Go Slice Range attribuent-elles la même adresse aux touches de carte lors de l'utilisation de « &stu » ?

Susan Sarandon
Libérer: 2024-12-06 04:14:10
original
546 Les gens l'ont consulté

Why Do Go Slice Range Loops Assign the Same Address to Map Keys When Using `&stu`?

Exploration du phénomène Go Slice Range

Dans l'extrait de code fourni, une tranche de structures d'étudiant est itérée à l'aide du mot-clé range. Cependant, l'attribution des adresses des étudiants à une carte révèle un problème apparemment déroutant : les clés de la carte résultantes ont la même adresse.

Pour comprendre ce phénomène, il est crucial de reconnaître que dans Go, le mot-clé range itère sur la carte. les éléments d'une tranche, pas les adresses. Cela signifie que la variable stu dans la boucle range est une copie de l'élément slice. Par conséquent, lorsque l'adresse de stu est prise et attribuée à une clé de map, c'est l'adresse de la copie, et non l'élément slice, qui est stockée.

Pour rectifier cela, il faut modifier le code pour prendre explicitement le adresse de l’élément slice. Ceci peut être réalisé en utilisant la variable d'index de tranche i :

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

Cette modification garantit que les clés de carte contiennent les adresses des éléments de tranche réels.

En comprenant la distinction entre itérer sur éléments slice et en prenant leurs adresses, les développeurs peuvent éviter toute confusion potentielle et garantir le comportement prévu de leur code lorsqu'ils travaillent avec des slices 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