make(map)和map {}之间的区别

时间:2018-12-01 22:43:24

标签: go

只是想知道两者之间有什么区别?

z := make(map[*test] string)

z := map[*test] string{}
我想像的东西还是都是无效的?

2 个答案:

答案 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
     

Composite literals

     

复合文字为结构,数组,切片和结构构造值   每次对其进行映射并创建新值。他们组成   字面量类型,后跟大括号绑定的元素列表。   每个元素可以可选地在对应的关键字之后。

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

尽管如此,请记住,未检查这些指针指向的值:

  

指针值具有可比性。如果两个指针值相等   指向同一个变量,或者两个变量都为零。指向   不同的零大小变量可能相等,也可能不相等。