Golang 中的嵌套映射
在 Golang 中,嵌套映射可用于创建分层数据结构。但是,使用嵌套映射时可能会出现一些意外行为。
多括号支持
Go 支持多个括号来访问嵌套映射。例如,以下代码成功打印与键“w”关联的值:
func main() { var data = map[string]map[string]string{} data["a"]["w"] = "x" data["b"]["w"] = "x" data["c"]["w"] = "x" fmt.Println(data) }
Nil Map
当嵌套映射不存在时,就会出现问题已初始化。地图类型的零值为 nil。对 nil 映射建立索引将导致运行时错误。例如,如果将上述代码修改如下:
func main() { var data = map[string]map[string]string{} data["a"]["w"] = "x" data["b"]["w"] = "x" data["c"]["w"] = "x" fmt.Println(data) }
程序将失败并出现错误:
panic: runtime error: assignment to entry in nil map
要解决此问题,必须在之前初始化嵌套映射为其条目赋值:
func main() { 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) }
或者,复合文字可用于初始化嵌套地图:
func main() { 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 中的嵌套映射并避免运行时错误?的详细内容。更多信息请关注PHP中文网其他相关文章!