Skip to content

make

专门用于创建切片(slice)、映射(map)和管道(channel)

make 和 new 的区别

函数用途返回类型是否初始化
new(T)分配内存*T(指针)零值初始化
make(T, ...)创建切片、map、channelT(引用类型本身)完整初始化,可直接使用
  • new 只是分配内存,返回指针
  • make 是“分配 + 初始化”,返回可直接使用的对象

切片

make([]T, len, cap)

创建长度为 len、容量为 cap 的切片

go
s := make([]int, 3, 5)
fmt.Println(len(s), cap(s)) // 3 5

映射(map)

make(map[K]V, cap)
go
m := make(map[string]int)
m["a"] = 1
fmt.Println(m) // map[a:1]

通道(channel)

make(chan T, cap)
go
ch := make(chan int)       // 无缓冲 channel
ch2 := make(chan int, 5)   // 缓冲区大小 5