Maison > développement back-end > Golang > Pourquoi ne puis-je pas prendre l'adresse d'un élément de carte dans Go ?

Pourquoi ne puis-je pas prendre l'adresse d'un élément de carte dans Go ?

Linda Hamilton
Libérer: 2024-12-14 08:03:12
original
330 Les gens l'ont consulté

Why Can't I Take the Address of a Map Element in Go?

Pourquoi « Impossible de prendre l'adresse de l'élément de carte » ?

Considérez l'extrait de code suivant :

odsMap := map[string]XMLElement{
    "key": {Value: "value"},
}

segRef := "key"
Copier après la connexion

L'instruction suivante fonctionne :

x := odsMap[segRef]
x.GetValue("@OriginDestinationKey")
Copier après la connexion

Cependant, cette instruction échoue avec ce qui suit erreurs :

cannot call pointer method on odsMap[segRef]
cannot take the address of odsMap[segRef]
Copier après la connexion

Ces erreurs se produisent car les expressions d'index de carte ne sont pas adressables. La structure interne d'une carte peut changer lorsqu'une nouvelle entrée est ajoutée, empêchant la prise de son adresse.

Par conséquent, lors de l'accès à une méthode avec un récepteur pointeur sur une valeur non-pointeur stockée dans une carte, un une variable intermédiaire est requise pour prendre l'adresse de cette valeur, comme le montre l'exemple de travail.

Pour éviter ce problème, envisagez plutôt de stocker les valeurs du pointeur dans la carte. Par exemple :

type My int

func (m *My) Str() string { return strconv.Itoa(int(*m)) }

odsMap := map[string]*My{}
my := My(12)
odsMap[segRef] = &my
Copier après la connexion

Alternativement, vous pouvez attribuer la valeur non-pointeur à une variable locale et prendre son adresse :

x := odsMap[segRef]
x.GetValue("@OriginDestinationKey") // Method call on *XMLElement
Copier après la connexion

En conclusion, les expressions d'index de carte ne sont pas adressables, nécessitant l'utilisation de variables intermédiaires ou de stratégies de stockage alternatives lors de l'accès aux méthodes de pointeur sur des valeurs non pointeurs dans les cartes.

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