不会初始化内存,只会将内存置零。
new(T)
为类型T
的新项分配已置零的内存空间,并返回它的地址,也就是一个*T
的值。
用Go的术语来说,它返回一个指针,该指针指向新分配的,类型为T
的零值。
内建函数make(T, args)
不同于new(T)
。它只用于创建slice
、map
和chan
,并返回类型为T
(而非*T
)的一个已初始化(而非零值)的值。
原因在于,这三种类型本质上为引用数据类型,在使用前必须初始化。例如,slice
是一个具有三项内容的描述符,包含一个指向(数组内部)数据的指针、长度及容量,在这三项被初始化之前,该slice
为nil
。
对于slice
、map
和chan
,make
用于初始化其内部的数据结构并准备好将要使用的值。
make
只适用于slice
、map
和chan
,且不返回指针。若要获得明确的指针,请使用new
分配内存。