Struktur mit verschachtelten maps golang
Hallo, ich bin neu zu gehen, und versuchte herauszufinden, wie Karten funktionieren.
Ich habe ein kleines test-Programm und kann nicht scheinen, um es zu arbeiten.
Was mache ich falsch?
package main
import (
"fmt"
)
type Stats struct {
cnt int
category map[string]Events
}
type Events struct {
cnt int
event map[string]Event
}
type Event struct {
value int64
}
func main() {
stats := new(Stats)
stats.cnt = 33
stats.category["aa"].cnt = 66
stats.category["aa"].event["bb"].value = 99
fmt.Println(stats.cnt, stats.category["aa"].event["bb"].value)
}
stats.category["aa"]
soll eine map von strings auf einen Ausschnitt der Ereignisse, aber Sie versuchen, weisen Sie ihm den Wert von 66.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es paar Probleme mit dem code:
Karte initialisiert werden muss, mit make-Funktion. Derzeit sind Sie null
Rückgabewert von der Karte ist nicht ansprechbar sind, dies weil wenn die Karte wächst, muss es verlegt die Ursache Speicher-Adresse zu ändern. Daher müssen wir, um zu extrahieren Wert explizit durch eine Zuordnung zu einer variable, update es und weisen Sie Sie zurück.
Verwenden Zeiger
Habe ich aktualisiert, die Lösung zu zeigen, aktualisiert es Wert zurückgegeben und die Zuordnung wieder und Zeiger.
http://play.golang.org/p/lv50AONXyU
Hinzufügen, dass diese als eine andere Herangehensweise an das problem:
Spielplatz
Gibt es ein paar Probleme mit dem Ansatz.
Du nicht initialisieren, Sie maps. Sie müssen erstellen Sie den ersten.
Karten zurückzugeben, Kopien Ihrer Werte. Also, wenn Sie ziehen Sie aus "aa" und ändern Sie es, sind Sie immer eine Kopie von "aa", ändern Sie es, dann werfen Sie es Weg. Sie müssen, um es wieder in die Karte, oder den Zeiger verwenden.
Hier ist ein funktionierendes Beispiel (nicht-Zeiger-version) auf Spielen.
Beachten Sie die Konstruktion der Karten, und der neu-Zuordnung wieder auf die Karte, wenn Sie ändern einen Wert.