Heim >Backend-Entwicklung >Golang >Warum kann ich in Go keine Zeigerempfänger für Karteneinträge verwenden?

Warum kann ich in Go keine Zeigerempfänger für Karteneinträge verwenden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-21 02:00:14266Durchsuche

Why Can't I Use Pointer Receivers on Map Entries in Go?

Dereferenzieren eines Kartenindex in Go

Innerhalb eines Go-Programms können Kartenindizes nicht direkt referenziert werden. Dieses Problem entsteht aufgrund der dynamischen Natur von Karten, bei denen sich die Adresse eines Eintrags während der Kartengröße oder -schrumpfung ändern kann. Daher führt der Versuch, Zeigerempfängermethoden für Karteneinträge aufzurufen, zu folgendem Fehler:

cannot call pointer method on f[0]
cannot take the address of f[0]

Um dieses Problem zu beheben, entfernen Sie einfach das Sternchen (*) vom Methodenempfänger in der problematischen Methode:

func (c Cashier) Buy(itemNum int){
    item, pass := c.items[itemNum]

    if pass{
        if item.amount == 1{
            delete(c.items, itemNum)
        } else{
            item.amount--
            c.items[itemNum] = item 
        }
        c.cash++
    }
}

Auf diese Weise ist die Methode kein Zeigerempfänger mehr, sodass sie problemlos für Karteneinträge aufgerufen werden kann.

Das obige ist der detaillierte Inhalt vonWarum kann ich in Go keine Zeigerempfänger für Karteneinträge verwenden?. 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