go中new 和 make的区别
在Go语言中,new
和 make
是两个用于创建变量的内建函数,它们的主要区别在于用途和适用的类型。
new
函数:
new
函数用于创建并初始化指针类型(返回指向零值的指针)。
它接受一个类型作为参数,并返回该类型的指针。
new
返回的是指向已分配内存的零值的指针。
例如,new(int)
返回一个指向 int
类型的零值的指针。
示例:
var p *int
p = new(int)
*p = 10
fmt.Println(*p) // 输出:10
make
函数:
make
函数用于创建 slice、map 和 channel 类型的数据结构。
它返回的是初始化后的非零值。
make
只能用于 slice、map 和 channel 的初始化,不能用于其他类型。
make
返回的是对应类型的已初始化(非零值)的引用。
示例:
slice := make([]int, 0, 10) // 创建一个长度为 0,容量为 10 的 slice
综上所述,new
用于任何类型的内存分配和返回指针,而 make
专门用于 slice、map 和 channel 的初始化。