只是想知道两者之间有什么区别:
z := make(map[*test] string)
Run Code Online (Sandbox Code Playgroud)
和
z := map[*test] string{}
Run Code Online (Sandbox Code Playgroud)
我是在想象事物还是它们都无效?
内置函数 make 接受类型 T,它必须是切片、映射或通道类型,可选地后跟特定于类型的表达式列表。它返回一个类型为 T(不是 *T)的值。内存按照初始值部分中的描述进行初始化。
Run Code Online (Sandbox Code Playgroud)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复合文字为结构体、数组、切片和映射构造值,并在每次评估它们时创建一个新值。它们由文字类型后跟花括号绑定的元素列表组成。每个元素之前可以有一个相应的键。
Run Code Online (Sandbox Code Playgroud)map[string]int{} map[string]int{"one": 1}
make是规范形式。复合文字是一种方便的替代形式。
z := make(map[int]string)
Run Code Online (Sandbox Code Playgroud)
和
z := map[int]string{}
Run Code Online (Sandbox Code Playgroud)
是等价的。
make()空映射的函数和初始化器是相同的。
可以使用相同的语法来初始化空映射,其功能与使用 make 函数相同:
m = map[string]int{}
来自https://blog.golang.org/go-maps-in-action
使用指针作为映射键是有效的,因为指针是可比较的
但请记住,这些指针指向的值不会被检查:
指针值是可比较的。如果两个指针指向同一个变量或者两者的值都为 nil,则它们相等。指向不同的零大小变量的指针可能相等,也可能不相等。