只是想知道两者之间有什么区别?
z := make(map[*test] string)
和
z := map[*test] string{}
我想像的东西还是都是无效的?
答案 0 :(得分:4)
The Go Programming Language Specification
Making slices, maps and channels
内置函数make采用类型T,该类型必须是切片,映射 或渠道类型,然后可以选择后面的特定类型列表 表达式。它返回类型T的值(不是* T)。内存是 已按照初始值部分中的说明进行了初始化。
Call Type T Result make(T) map map of type T make(T, n) map map of type T with initial space for approximately n elements
复合文字为结构,数组,切片和结构构造值 每次对其进行映射并创建新值。他们组成 字面量类型,后跟大括号绑定的元素列表。 每个元素可以可选地在对应的关键字之后。
map[string]int{} map[string]int{"one": 1}
make
是规范形式。复合文字是一种方便的替代形式。
z := make(map[int]string)
和
z := map[int]string{}
等效。
答案 1 :(得分:3)
函数make()
和空映射的初始化程序相同。
可以使用相同的语法来初始化一个空的映射,即 在功能上与使用make函数相同:
m = map[string]int{}
来自https://blog.golang.org/go-maps-in-action
将指针用作映射键是有效的,因为指针为comparable
尽管如此,请记住,未检查这些指针指向的值:
指针值具有可比性。如果两个指针值相等 指向同一个变量,或者两个变量都为零。指向 不同的零大小变量可能相等,也可能不相等。