gpt4 book ai didi

dictionary - Golang 中的嵌套 map

转载 作者:IT老高 更新时间:2023-10-28 13:00:35 24 4
gpt4 key购买 nike

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 中的嵌套 map 有问题吗?还是嵌套 map 不支持多括号?

最佳答案

zero value map 类型为 nil。它尚未初始化。您不能将值存储在 nil 映射中,这是运行时 panic 。

在上一个示例中,您初始化了(外部)data 映射,但它没有条目。当你像 data["a"] 一样索引它时,由于还没有 "a" 键的条目,索引它返回值类型的零值这是 map 的 nil 。所以尝试分配给 data["a"]["w"] 是运行时 panic 。

你必须先初始化一个 map ,然后才能在其中存储元素,例如:

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]]

请注意,当您声明一个映射类型的变量并使用 composite literal 对其进行初始化时(如 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 .

关于dictionary - Golang 中的嵌套 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44305617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com