make
专门用于创建切片(slice)、映射(map)和管道(channel)
make 和 new 的区别
| 函数 | 用途 | 返回类型 | 是否初始化 |
|---|---|---|---|
| new(T) | 分配内存 | *T(指针) | 零值初始化 |
| make(T, ...) | 创建切片、map、channel | T(引用类型本身) | 完整初始化,可直接使用 |
- 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