我在 golang 博客上看到:https://blog.golang.org/go-maps-in-action那:
var m map[string]int
Map types are reference types, like pointers or slices, and so the value of m above is nil; it doesn't point to an initialized map. A nil map behaves like an empty map when reading, but attempts to write to a nil map will cause a runtime panic; don't do that. To initialize a map, use the built in make function:
m = make(map[string]int)
The make function allocates and initializes a hash map data structure and returns a map value that points to it.
我很难理解其中的某些部分:
var m map[string]int
有什么作用?- 为什么我需要写
m = make(map[string]int)
而不是i = make(int)
最佳答案
What does var m map[string]int do?
它告诉编译器m
是一个map[string]int
类型的变量,并将map[string] int类型的“零值”赋值给m
(这就是为什么 m 为 nil,因为 nil 是任何映射的零值)。
Why do I need to write m = make(map[string]int) but not i = make(int)
你不需要。您也可以像这样创建一个初始化 map :
m = map[string]int{}
这完全一样。
maps 和 ints 之间的区别是:一个 nil map 是完美的。例如。 nil map 的 len()
有效并且为 0。您不能使用 nil map 做的唯一事情是存储键值对。如果你想这样做,你必须准备/初始化 map 。 Go 中的这种准备/初始化是通过内置的 make
(或通过如上所示的文字映射)完成的。 int 不需要这个初始化过程。由于没有 nil 整数,此初始化将完全是噪音。
请注意,您没有初始化变量 m
:变量m
是字符串到整数的映射,无论是否初始化。就像 i
是一个整数变量。现在 int 可以直接使用,而 map 需要多一步,因为语言是这样工作的。
关于go - map 类型是引用类型。 var m map[string]int 不指向初始化的映射。这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37568346/