嗨,我是新手,正在尝试弄清楚地图的工作原理。我已经编写了一个小测试程序,似乎无法使其正常工作。我做错了什么?
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)
}
Run Code Online (Sandbox Code Playgroud)
小智 8
代码有几个问题:
需要使用make函数初始化地图。目前他们是零
映射的返回值是不可寻址的,这是因为如果映射在增长,则需要重新定位,这将导致内存地址发生变化。因此,我们需要从映射显式提取值到变量,对其进行更新并将其分配回去。
使用指针
我已经更新了解决方案,以显示更新后的返回值以及将其分配回和指针的情况。
http://play.golang.org/p/lv50AONXyU
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 = make(map[string]Events)
e, f := stats.category["aa"]
if !f {
e = Events{}
}
e.cnt = 66
e.event = make(map[string]*Event)
stats.category["aa"] = e
stats.category["aa"].event["bb"] = &Event{}
stats.category["aa"].event["bb"].value = 99
fmt.Println(stats)
fmt.Println(stats.cnt, stats.category["aa"].event["bb"].value)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25239 次 |
最近记录: |