Dereferenzieren eines Kartenindex in Golang
Beim Arbeiten mit Karten in Golang ist es wichtig, die Einschränkungen beim Referenzieren von Karteneinträgen zu verstehen. In einem aktuellen Programmierszenario tauchte eine Frage bezüglich des Fehlers auf: „Zeigermethode für f[0] kann nicht aufgerufen werden“.
Um das Problem zu klären, untersuchen wir den folgenden Code:
package main import ( "fmt" "inventory" ) func main() { x := inventory.Cashier{} x.AddItem("item1", 13) f := x.GetItems() fmt.Println(f[0].GetAmount()) }
Das Problem liegt im Typ der Karte und der aufgerufenen Methode. In der Driver.go-Datei wird die GetItems-Methode für die Cashier-Struktur aufgerufen, die eine Kopie der Artikelzuordnung zurückgibt. Allerdings handelt es sich bei der GetAmount-Methode um eine Zeigerempfängermethode, die die Verwendung der tatsächlichen Struktur erfordert.
In Go können Karteneinträge nicht direkt angesprochen werden, da sich ihre Adresse ändern kann, wenn die Karte größer oder kleiner wird. Daher können Sie keine Zeigerempfängermethoden für Karteneinträge aufrufen.
Um dieses Problem zu beheben, können Sie die GetItems-Methode ändern, um stattdessen einen Zeiger auf die Karte zurückzugeben:
func (c *Cashier) GetItems() *map[int]item { return &c.items }
By Dadurch stellen Sie sicher, dass die GetAmount-Methode direkt im Map-Eintrag aufgerufen werden kann. Hier ist die korrigierte Hauptfunktion:
func main() { x := inventory.Cashier{} x.AddItem("item1", 13) f := x.GetItems() fmt.Println((*f)[0].GetAmount()) }
Das obige ist der detaillierte Inhalt vonWarum kann ich für einen Go-Map-Eintrag keine Zeigerempfängermethode aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!