Heim >Backend-Entwicklung >Golang >Warum kann ich die Adresse eines Kartenelements in Go nicht übernehmen?
Warum „Die Adresse des Kartenelements kann nicht übernommen werden“?
Bedenken Sie den folgenden Codeausschnitt:
odsMap := map[string]XMLElement{ "key": {Value: "value"}, } segRef := "key"
Die folgende Anweisung funktioniert:
x := odsMap[segRef] x.GetValue("@OriginDestinationKey")
Diese Anweisung schlägt jedoch mit Folgendem fehl Fehler:
cannot call pointer method on odsMap[segRef] cannot take the address of odsMap[segRef]
Diese Fehler treten auf, weil Kartenindexausdrücke nicht adressierbar sind. Die interne Struktur einer Karte kann sich ändern, wenn ein neuer Eintrag hinzugefügt wird, wodurch verhindert wird, dass ihre Adresse übernommen wird.
Daher wird beim Zugriff auf eine Methode mit einem Zeigerempfänger auf einen in einer Karte gespeicherten Nicht-Zeigerwert ein Es ist eine Zwischenvariable erforderlich, um die Adresse dieses Werts anzunehmen, wie im Arbeitsbeispiel zu sehen ist.
Um dieses Problem zu vermeiden, sollten Sie stattdessen in Betracht ziehen, Zeigerwerte in der Karte zu speichern. Zum Beispiel:
type My int func (m *My) Str() string { return strconv.Itoa(int(*m)) } odsMap := map[string]*My{} my := My(12) odsMap[segRef] = &my
Alternativ können Sie den Nicht-Zeigerwert einer lokalen Variablen zuweisen und deren Adresse übernehmen:
x := odsMap[segRef] x.GetValue("@OriginDestinationKey") // Method call on *XMLElement
Zusammenfassend lässt sich sagen, dass Kartenindexausdrücke nicht adressierbar sind. Dies erfordert die Verwendung von Zwischenvariablen oder alternativen Speicherstrategien beim Zugriff auf Zeigermethoden auf Nicht-Zeigerwerte in Karten.
Das obige ist der detaillierte Inhalt vonWarum kann ich die Adresse eines Kartenelements in Go nicht übernehmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!