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

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

Susan Sarandon
Susan SarandonOriginal
2024-11-14 11:08:02351Durchsuche

Why Do I Get

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!

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