Heim  >  Artikel  >  Backend-Entwicklung  >  Warum führt die Indizierung einer vom Zeiger in Go übergebenen Karte zu Kompilierungsfehlern?

Warum führt die Indizierung einer vom Zeiger in Go übergebenen Karte zu Kompilierungsfehlern?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-13 00:36:02900Durchsuche

Why Does Indexing a Map Passed by Pointer in Go Cause Compilation Errors?

Übergabe von Karten nach Wert vs. Zeiger in Go

In Go kann die Übergabe nach Wert und Zeiger verwirrend sein, insbesondere beim Umgang mit Kartentypen. Dieser Artikel befasst sich mit dem Problem der Indizierung einer per Zeiger übergebenen Karte, was zu Kompilierungsfehlern führt.

Das Problem

Beim Versuch, eine Karte per Zeiger zu übergeben und zu ändern Bei Werten löst Go einen Fehler aus, dass der Typ die Indizierung nicht unterstützt. Dies liegt daran, dass die Indizierung auf einen Zeiger für Karten nicht unterstützt wird.

Die Lösung

Um diesen Fehler zu vermeiden, dereferenzieren Sie den Zeiger, bevor Sie die Karte indizieren. Verwenden Sie anstelle von b[amount.Currency] (*b)[amount.Currency].

Weitere Diskussion

Standardmäßig werden einfache Typen wie Ganzzahlen übergeben Wert, während Strukturen und Schnittstellen als Referenz übergeben werden. Dies gilt jedoch nicht für Karten. Karten werden standardmäßig als Referenz übergeben, sodass die Übergabe als Wert oder Zeiger im Wesentlichen dasselbe ist.

Im obigen Beispiel ist die Verwendung eines Zeigerempfängers für die Add-Methode nicht erforderlich, da die Karte bereits als Referenz übergeben wird. Die Methode könnte ohne Funktionsverlust wie folgt geschrieben werden:

func (b Balance) Add(amount Amount) Balance {
    current, ok := b[amount.Currency]
    if ok {
        b[amount.Currency] = current + amount.Value
    } else {
        b[amount.Currency] = amount.Value
    }
    return b
}

Zusammenfassend lässt sich sagen, dass es bei der Arbeit mit Karten nicht notwendig ist, diese per Zeiger zu übergeben, um ein Kopieren zu vermeiden. Durch Wertübergabe wird das gleiche Ergebnis erzielt, ohne dass eine Dereferenzierung erforderlich ist.

Das obige ist der detaillierte Inhalt vonWarum führt die Indizierung einer vom Zeiger in Go übergebenen Karte zu Kompilierungsfehlern?. 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