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] }
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!