登录
首页 >  Golang >  Go问答

Golang 中的嵌套地图

来源:Golang技术栈

时间:2023-04-29 11:26:00 228浏览 收藏

你在学习Golang相关的知识吗?本文《Golang 中的嵌套地图》,主要介绍的内容就涉及到golang,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

func main() {
    var data = map[string]string{}
    data["a"] = "x"
    data["b"] = "x"
    data["c"] = "x"
    fmt.Println(data)
}

它运行。

func main() {
    var data = map[string][]string{}
    data["a"] = append(data["a"], "x")
    data["b"] = append(data["b"], "x")
    data["c"] = append(data["c"], "x")
    fmt.Println(data)
}

它也运行。

func main() {
    var w = map[string]string{}
    var data = map[string]map[string]string{}
    w["w"] = "x"
    data["a"] = w
    data["b"] = w
    data["c"] = w
    fmt.Println(data)
}

它又跑了!

func main() {
    var data = map[string]map[string]string{}
    data["a"]["w"] = "x"
    data["b"]["w"] = "x"
    data["c"]["w"] = "x"
    fmt.Println(data)
}

但是失败了!?

Go 中的嵌套地图有问题吗?或者嵌套地图没有多括号支持?

正确答案

地图类型的零值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]]

请注意,当您声明一个映射类型的变量并使用复合文字(如 中var data = 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上尝试一下。

到这里,我们也就讲完了《Golang 中的嵌套地图》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于golang的知识点!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表