当我们想要在 Go 语言中初始化一个结构时,可能会用到两个不同的关键字 — make 和 new。因为它们的功能相似,所以初学者可能会对这两个关键字的作用感到困惑,但是它们两者能够初始化的却有较大的不同。
make 的作用是初始化内置的数据结构,包括且仅包括 slice、map 和 Channelnew 的作用是根据传入的类型分配一片内存空间,并返回指向这片内存空间的指针make()slice := make([]int, 0, 100)
hash := make(map[int]bool, 10)
ch := make(chan int, 5)
slice 是一个包含 data、cap 和 len 的结构体 reflect.SliceHeader;hash 是一个指向 runtime.hmap 结构体的指针;ch 是一个指向 runtime.hchan 结构体的指针;