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
Linda HamiltonOriginal
2024-12-14 08:03:12337Durchsuche

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"

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!

Stellungnahme:
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