都是用来分配空间,初始化【类型】
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