make 和 new
Go 中初始化一个结构,有两个关键字:make 和 new。虽然都是用于初始化结构,但是有很大的不同。
new是根据传入的类型分配一片内存空间,并返回指向这片内存空间的指针。- 任何类型都可以使用
new来初始化。 - 内存里存的值是对应类型的零值,这就意味着,使用
new初始化slice、map和channel时,得到是nil。
- 任何类型都可以使用
make是专门用来初始化内置的数据结构的,也就是slice、map和channel。// sl 是一个结构体 reflect.SliceHeader; sl := make([]int, 0, 100) // m 是一个指向 runtime.hmap 结构体的指针 m := make(map[int]bool, 10) // ch 是一个指向 runtime.hchan 结构体的指针 ch := make(chan int, 5)
最后更新于