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)
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 // ... }
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 }
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!