Heim > Backend-Entwicklung > Golang > Warum kann ich die Adresse eines Kartenelements in Go nicht übernehmen?

Warum kann ich die Adresse eines Kartenelements in Go nicht übernehmen?

Linda Hamilton
Freigeben: 2024-12-14 08:03:12
Original
336 Leute haben es durchsucht

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

Warum „Die Adresse des Kartenelements kann nicht übernommen werden“?

Bedenken Sie den folgenden Codeausschnitt:

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

segRef := "key"
Nach dem Login kopieren

Die folgende Anweisung funktioniert:

x := odsMap[segRef]
x.GetValue("@OriginDestinationKey")
Nach dem Login kopieren

Diese Anweisung schlägt jedoch mit Folgendem fehl Fehler:

cannot call pointer method on odsMap[segRef]
cannot take the address of odsMap[segRef]
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage