Maison > développement back-end > Golang > Pourquoi ne puis-je pas attribuer à un champ Struct dans une Go Map ?

Pourquoi ne puis-je pas attribuer à un champ Struct dans une Go Map ?

DDD
Libérer: 2024-11-27 13:13:13
original
298 Les gens l'ont consulté

Why Can't I Assign to a Struct Field in a Go Map?

"Impossible d'attribuer une paire dans une carte" : explication de l'adressabilité

Dans Go, lorsque vous tentez de modifier un champ d'une structure stockée dans une carte, le L'erreur "ne peut pas lui être attribuée" peut survenir. Ce problème provient du concept d'adressabilité, qui restreint l'affectation directe aux valeurs dans les cartes.

La structure paire contient deux valeurs float64 dans une carte, telle que dictionnaire["xxoo"].b. L'attribution d'une nouvelle valeur au dictionnaire["xxoo"].b échoue car la valeur de la carte n'est pas adressable.

Les cartes Go sont conçues pour stocker et récupérer efficacement des données. Pour maintenir cette efficacité, les valeurs de la carte ne sont pas adressables, ce qui signifie que la gestion de la mémoire permet de les déplacer selon les besoins. Sans adressabilité, l'opérateur sélecteur (.) ne peut pas être utilisé pour accéder au champ struct pour une affectation directe.

Pour éviter cette limitation, utilisez un type de pointeur comme valeur de carte. Par exemple, en définissant une paire map[string]*, l'indirection du pointeur rend la structure adressable. Cela permet une affectation directe, comme le montre le code suivant :

dict := make(map[string]*pair)
dict["xxoo"] = &pair{5.0, 2.0}
dict["xxoo"].b = 5.0
Copier après la connexion

Alternativement, si vous utilisez une carte avec des types de valeur, attribuez une copie de la valeur existante ou fournissez une nouvelle valeur entièrement :

p := dict["xxoo"]
p.b = 5.0
dict["xxoo"] = p

// or
dict["xxoo"] = pair{5.0, 5.0}
Copier après la connexion

En comprenant l'adressabilité et en mettant en œuvre la solution appropriée, vous pouvez manipuler efficacement les structures stockées dans les cartes 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal