Go 中的 &T{...}、new(T)、make(T) 的区别
一、&T{…}
&T{...}
可以返回一个 T 类型指针,并且在括号指定初值,只能用于结构体
二、new(T)
new(T)
与&T{...}
基本相同,但不能指定初值(所以一般还是用new(T)
),不过除了结构体还可以用于基本类型(如 int )
三、make(T)
make(T)
用于创建 3 种内建的引用类型:切片、map 和 channel,如:
1 | v := make([]int, 10, 50) |
这样分配一个有 50 个 int 值的数组,并且创建了一个长度为 10,容量为 50 的 切片 v,该 切片 指向数组的前 10 个元素
换言之,new 函数分配内存,make 函数初始化;下图给出了区别:
又或者,我们来看 buildin.go 中的注释:
评论
GiscusTwikoo