Heim >Backend-Entwicklung >Golang >Go: Warum erhalte ich die Meldung „Ungültiger Vorgang: Typ *map[key]value unterstützt keine Indizierung.'?

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-12 04:53:01347Durchsuche

Go: Why Am I Getting

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!

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