地图类型的零值为
nil。尚未初始化。您无法在
nil地图中存储值,这是运行时的恐慌。
在上一个示例中,您初始化了(外部)
data映射,但是它没有条目。当您像那样对它进行索引时
data["a"],由于尚无
"a"键输入,因此对其进行索引将返回
nil用于地图的值类型的零值。因此,尝试分配给
data["a"]["w"]运行时恐慌。
您必须先初始化地图,然后再在其中存储元素,例如:
var data = map[string]map[string]string{}data["a"] = map[string]string{}data["b"] = make(map[string]string)data["c"] = make(map[string]string)data["a"]["w"] = "x"data["b"]["w"] = "x"data["c"]["w"] = "x"fmt.Println(data)
输出(在Go Playground上尝试):
map[a:map[w:x] b:map[w:x] c:map[w:x]]
请注意,当您声明映射类型的变量并使用复合文字对其进行初始化时(如所述
vardata = map[string]string{}),这也算作初始化。
请注意,您还可以使用复合文字来初始化嵌套地图:
var data = map[string]map[string]string{ "a": map[string]string{}, "b": map[string]string{}, "c": map[string]string{},}data["a"]["w"] = "x"data["b"]["w"] = "x"data["c"]["w"] = "x"fmt.Println(data)
输出是相同的。在Go Playground上尝试一下。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)