Go语言中var make() new()的区别

387 阅读1分钟

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返回的是该类型的指针。

image-20221206105739107.png

可以看到此时返回的是一个[]int 类型的变量变量名为makeIntClice,我们可以直接使用

使用new创建一个看看:

image-20221206105454092.png

通过new返回的是一个*[]int类型的指针变量名为makeIntSlice。可以看到我们使用这个变量也是使用*号来使用的。这一点和make是有很大不同的。

其实如果大家学过C语言的话,这些还是很好理解的。就是指针

注意

注意:

  • 使用make(),来初始化slice,map 和channel 。使用make来创建slice等必须要指定长度。跟Java一样,你创建一个数组的时候也是必须指定长度的,注意我说的是基本类型的数组而不是ArrayList等
  • 大多数场合,类型明确的场合下,使用短变量声明方式:=。
  • 当使用文字方式初始化一个变量,并且需要指明类型时,使用var变量声明方式。
  • 避免使用new(),除非你需要一个指针变量。