Heim >Backend-Entwicklung >Golang >Go: Warum erhalte ich die Meldung „Ungültiger Vorgang: Typ *map[key]value unterstützt keine Indizierung.'?
Go: Behebung des Fehlers „Ungültiger Vorgang“ bei der Kartenindizierung
Beim Arbeiten mit Karten in Go kann der Compilerfehler „ungültig“ auftreten Operation: Typ *map[key]value unterstützt keine Indizierung.“ Dieser Fehler tritt auf, wenn Sie versuchen, einen Zeiger auf eine Karte anstelle der Karte selbst zu indizieren.
Beachten Sie den folgenden Code:
func (b *Balance) Add(amount Amount) *Balance { current, ok := b[amount.Currency] // Error: indexing pointer to map ... }
Um diesen Fehler zu beheben, sollten Sie Ihren Code ändern Indizieren Sie die Karte korrekt über den Zeiger:
func (b *Balance) Add(amount Amount) *Balance { current, ok := (*b)[amount.Currency] // Index the map through the pointer ... }
Wenn es sich bei Ihrer Struktur alternativ nur um eine Karte handelt, wird empfohlen, die Definition von Methoden zu vermeiden, die Kartenzeiger empfangen, da diese keinen Nutzen bieten. Definieren Sie stattdessen Methoden, die die Karte nach Wert empfangen, wie unten gezeigt:
import "fmt" type Currency string type Amount struct { Currency Currency Value float32 } type Balance map[Currency]float32 func (b Balance) Add(amount Amount) Balance { // Method receives map by value current, ok := b[amount.Currency] ... } func main() { b := Balance{Currency("USD"): 100.0} b = b.Add(Amount{Currency: Currency("USD"), Value: 5.0}) fmt.Println("Balance: ", b) }
Dieser Ansatz vermeidet den Fehler, der mit der Indizierung einer Karte über einen Zeiger verbunden ist, während die Referenznatur des Kartentyps erhalten bleibt.
Das obige ist der detaillierte Inhalt vonGo: Warum erhalte ich 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!