make可以用来为 slice,map 或 chan 类型分配内存和初始化一个对象,注意只能用于这三种类型。
slice
a := make([]int, 5, 10)
a[1]=2
fmt.Println(a)
make函数的第一个入参为slice的类型,第二个入参为slice的初始长度,第三个入参为slice的预留长度(可以省略)。
如果slice的预留长度存在,则会为make生成的对象预留一整块连续的内存,这样对slice扩充时,cpu运行的成本较低。
如果slice的预留长度不存在,则slice每次append时,都要重新申请不连续的内存,cpu运行成本较高。
对slice进行append时,超出了原本的长度,可以运行,但是内存不连续。
PS:append后对象的cap并不是+1,详见golang内存分配。
map
a := make(map[int]string)
a[0] = "test"
a[2] = "action"
fmt.Println(a)
chan
详见go多协程编程。