理解 Go make 和 new

都是用来分配空间,初始化【类型】

new(t):

分配一个空间,放进去t的零值,放回指针

var a *int  等价  a := new(int)
var a int  不等价  a := new(int)
&[]model.HbUser{}  等价  new([]model.HbUser)

但是var a *int 这种不是很好用吗,用new干啥

make:

只能用在引用类型 slice、map、channel

有可能是因为引用类型需要额外参数创建,才单独搞出来一个make吧

返回的是引用类型
不是引用类型的指针
不是零值

selice/map 的零值是nil,但是make是初始化,他知道了要创建多大的selice/map,所以会分配一个地方给变量。
var a []int 这种是零值 nil。因为此时并不知道a是个多大的selice,所以没有分配地方给a
a := []int{} 这种是空selice。因为此时已经知道了是个0大小的selice,所以直接分配匹配地方给a

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容