Dereferenzierung eines Kartenindex in Golang

9

Ich lerne gerade Go, und ich habe dieses einfache und grobe Inventarprogramm gemacht, nur um mit Strukturen und Methoden zu experimentieren, um zu verstehen, wie sie funktionieren. In der Treiberdatei versuche ich eine Methode von und einen Artikeltyp aus der Artikelliste des Kassierertyps aufzurufen. Meine Methode verfügt über Zeigerempfänger, um die Strukturen direkt zu verwenden, anstatt Kopien zu erstellen. Wenn ich das Programm starte, erhalte ich den Fehler .\driver.go:11: cannot call pointer method on f[0] .\driver.go:11: cannot take the address of f[0]

Inventar.go:

%Vor%

Driver.go:

%Vor%

Der Teil des Codes, der wirklich zu meinem Problem gehört, ist die Funktion GetAmount in inventory.go und die Druckanweisung in driver.go

    
user1721803 26.11.2013, 17:55
quelle

3 Antworten

19

Ein Karteneintrag kann nicht adressiert werden (da sich seine Adresse während des Kartenwachstums / -verkleinerungsvorgangs ändern kann), sodass Sie keine Zeigerempfängermethoden für sie aufrufen können.

Einzelheiten hier: Ссылка

    
Volker 26.11.2013, 18:16
quelle
13

Wie Volker in seiner Antwort sagte - Sie können die Adresse eines Gegenstandes in der Karte nicht finden. Was Sie tun sollten - ist, Zeiger auf Elemente in Ihrer Map zu speichern, anstatt Elementwerte zu speichern:

%Vor%

Ссылка

    
Kluyg 26.11.2013 19:18
quelle
0

Während die anderen Antworten nützlich sind, denke ich, dass es in diesem Fall am besten ist, nicht-mutierende Funktionen zu machen, nicht einen Zeiger nehmen:

%Vor%     
Andrew W. Phillips 17.05.2017 07:28
quelle

Tags und Links