当我们想要在 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
结构体的指针;