看起来两者没有什么区别,都在堆上分配内存,可是它们的行为不一样,适用于不一样的类型。数组
&T{}
。换言之,new 函数分配内存,make 函数初始化;下图给出了区别:函数
上两个图:spa
上图中:指针
var p *[]int = new([]int) // *p == nil; with len and cap 0 p := new([]int)
在下图中, p := make([]int, 0)
,切片 已经被初始化,可是指向一个空的数组。code
以上两种方式实用性都不高。下面的方法:blog
var v []int = make([]int, 10, 50)
或者内存
v := make([]int, 10, 50)
这样分配一个有 50 个 int 值的数组,而且建立了一个长度为 10,容量为 50 的 切片 v,该 切片 指向数组的前 10 个元素。it