理解 Go make 和 new

2021-10-22  本文已影响0人  禹声

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

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

上一篇 下一篇

猜你喜欢

热点阅读