首页 > 后端开发 > Golang > 如何安全处理 Go 中的嵌套映射并避免运行时错误?

如何安全处理 Go 中的嵌套映射并避免运行时错误?

Linda Hamilton
发布: 2024-12-12 21:06:23
原创
931 人浏览过

How to Safely Handle Nested Maps in Go and Avoid Runtime Errors?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板