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"
L'instruction suivante fonctionne :
x := odsMap[segRef] x.GetValue("@OriginDestinationKey")
Cependant, cette instruction échoue avec ce qui suit erreurs :
cannot call pointer method on odsMap[segRef] cannot take the address of odsMap[segRef]
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
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
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!