Warum gibt Go die Meldung „Ungültiger Vorgang: Typ *map[key]value unterstützt keine Indizierung' aus?

DDD
Freigeben: 2024-11-25 08:07:40
Original
869 Leute haben es durchsucht

Why Does Go Throw

Los: Ungültiger Vorgang – Typ *map[key]value unterstützt keine Indizierung

Hintergrund:

Die Zeigermechanismen von Go können verwirrend sein, insbesondere bei der Arbeit mit Karten. In Go ist eine Karte ein Referenztyp. Das heißt, wenn Sie eine Karte als Wert übergeben, übergeben Sie eine Kopie der Referenz und nicht die eigentliche Karte selbst. Manchmal müssen wir jedoch möglicherweise die ursprüngliche Karte ändern, die als Argument an eine Funktion übergeben wird.

Problem:

Beim Versuch, eine Karte per Zeiger an zu übergeben Wenn Sie den Inhalt ändern, tritt möglicherweise der folgende Fehler auf:

prog.go:15: invalid operation: b[amount.Currency] (type *Balance does not support indexing)
Nach dem Login kopieren

Dieser Fehler weist darauf hin, dass Sie versuchen, einen Zeiger auf eine Karte zu indizieren, was nicht unterstützt wird in Go.

Lösung:

Um dieses Problem zu beheben, müssen Sie zwischen dem Zugriff auf den Kartenwert und dem Zeiger darauf unterscheiden. So gehen Sie richtig vor:

func (b *Balance) Add(amount Amount) *Balance {
    // Index the *b (pointer to map) to get the map itself
    current, ok := (*b)[amount.Currency]
    // Continue modifying the indexed map
    // ...
}
Nach dem Login kopieren

Durch die Dereferenzierung des Zeigers b mit *b erhalten Sie Zugriff auf die Karte selbst und können die notwendigen Operationen darauf ausführen.

Alternativer Ansatz:

Wenn die Karte das einzige Feld in Ihrer Struktur ist, wie es in diesem Beispiel der Fall ist, können Sie dies vermeiden Übergabe per Zeiger. Übergeben Sie es stattdessen als Wert, wie im folgenden Code gezeigt:

func Add(b Balance, amount Amount) Balance {
    // ... do your operations on the passed map ...
    return b
}
Nach dem Login kopieren

Go übergibt Karten standardmäßig als Referenz. Selbst wenn Sie sie also als Wert übergeben, werden sie intern und bei allen Änderungen immer noch als Referenz behandelt Innerhalb der Funktion vorgenommene Änderungen werden in der Originalkarte widergespiegelt.

Denken Sie daran, bei der Arbeit mit Karten immer zwischen der Indizierung der Karte selbst und dem Zeiger darauf zu unterscheiden. Dies wird Ihnen helfen, Fehler wie den in diesem Fall aufgetretenen zu vermeiden.

Das obige ist der detaillierte Inhalt vonWarum gibt Go die Meldung „Ungültiger Vorgang: Typ *map[key]value unterstützt keine Indizierung' aus?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage