Heim >Backend-Entwicklung >Golang >Warum erhalte ich in Go die Meldung „Ungültiger Vorgang – Typ *map[key]value unterstützt keine Indizierung'?
Go: Ungültiger Vorgang – Typ *map[key]value unterstützt keine Indizierung
In Go wird versucht, eine Karte per Zeiger zu übergeben und das Ändern der ursprünglichen Karte über den Zeiger kann zu einem Fehler „Ungültiger Vorgang“ führen. Dies liegt daran, dass die Indizierung auf einen Zeiger auf eine Karte in Go nicht unterstützt wird.
Um dieses Problem zu beheben, ist es notwendig, auf der Karte selbst und nicht auf dem Zeiger zu indizieren. Hier ist ein modifizierter Code, der zeigt, wie das geht:
package main import "fmt" type Currency string type Amount struct { Currency Currency Value float32 } type Balance map[Currency]float32 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 } func main() { b := &Balance{Currency("USD"): 100.0} b = b.Add(Amount{Currency: Currency("USD"), Value: 5.0}) fmt.Println("Balance: ", (*b)) }
Durch Dereferenzierung des Zeigers auf die Karte (*b) vor der Indizierung ändert der Code nun korrekt die ursprüngliche Karte.
Hinweis: Während der obige Code zeigt, wie man eine Karte über einen Zeiger ändert, ist es im Allgemeinen idiomatischer, die Karte in Go als Wert zu übergeben. Durch die Übergabe eines Werts werden an der Karte vorgenommene Änderungen automatisch an die ursprüngliche Karte zurückgegeben.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in Go die Meldung „Ungültiger Vorgang – Typ *map[key]value unterstützt keine Indizierung'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!