make用于内建类型(map、slice 和channel)的内存分配。初始化了引用类型内部的数据结构,填充适当的值。make返回初始化后的(非零,不是*T)值。导致这三个类型有所不同的原因是指向数据结构的引用在使用前必须被初始化。例如,一个slice,是一个包含指向数据(内部array)的指针、长度和容量的三项描述符;在这些项目被初始化之前,slice为nil。
new用于各种类型的零值填充的T类型的内存空间分配。分配了零值填充的T类型的内存空间,并且返回其地址,即一个*T类型的值。用Go的术语说,它返回了一个指针,指向新分配的类型T的零值。本质上说跟其它语言中的同名函数功能一样:new(T)。
make用法举例:
创建数组切片
1. 创建一个初始元素个数为5的数组切片,元素初始值为0: mySlice1 := make([]int, 5)
2. 创建一个初始元素个数为5的数组切片,元素初始值为0,并预留10个元素的存储空间: mySlice2 := make([]int, 5, 10)
创建一个map
1. 创建了一个键类型为string、值类型为PersonInfo的map:myMap = make(map[string] PersonInfo)
2. 创建了一个初始存储能力为100的map:myMap = make(map[string] PersonInfo, 100)
3. 创建并初始化map的代码.
myMap = map[string] PersonInfo{
"1234": PersonInfo{"1", "Jack", "Room 101,..."},
}