Go语言中var make() new()的区别
var make new 的区别
在Go语言中我们可以使用var来声明一个变量,并指名数据类型。类似于Java中的
// java int为数据类型 a为变量名
int a;
// Go 与Java的顺序刚好相反
var a int
new和make都是用来内存分配的原语,make用于内建类型(map、slice和channel)的内存分配。new用于各种类型的内存分配
从返回值上来说make返回的是引用类型本身,而new返回的是该类型的指针。
可以看到此时返回的是一个[]int 类型的变量变量名为makeIntClice,我们可以直接使用
使用new创建一个看看:
通过new返回的是一个*[]int类型的指针变量名为makeIntSlice。可以看到我们使用这个变量也是使用*号来使用的。这一点和make是有很大不同的。
其实如果大家学过C语言的话,这些还是很好理解的。就是指针
注意
注意:
- 使用make(),来初始化slice,map 和channel 。使用make来创建slice等必须要指定长度。跟Java一样,你创建一个数组的时候也是必须指定长度的,注意我说的是基本类型的数组而不是ArrayList等
- 大多数场合,类型明确的场合下,使用短变量声明方式:=。
- 当使用文字方式初始化一个变量,并且需要指明类型时,使用var变量声明方式。
- 避免使用new(),除非你需要一个指针变量。