说明一下Golang 中 make 和 new 的区别?
好的,关于 make
和 new
在 Go 语言中的区别,我来解释一下。
new
函数的作用:new(T)
函数会为 T 类型的新项分配零值内存,并返回其地址,即一个*T
类型的值(指针)。这种方法适用于各种类型,包括基本类型如int
、float
、bool
等,以及数组、结构体等。- 使用
new
分配的内存被初始化为类型的零值,例如new(int)
返回的指针指向的值会被初始化为 0。
make
函数的作用:make
函数仅用于切片(slice)、映射(map)和通道(channel)的内存分配,并返回一个有初始值(非零值)的 T 类型,而不是*T
。- 对于切片,
make
会分配内存并初始化切片的内部结构,如长度和容量等。 - 对于映射,
make
会初始化映射的结构。 - 对于通道,
make
会配置通道的缓冲大小。
- 应用场景与例子:
- 使用
new
:- 当你需要一个指向某基本类型零值的指针时,比如在需要在函数间共享或者更改数据时。
- 例子:
num := new(int)
创建了一个指向整数的指针,其值初始化为 0。
- 使用
make
:- 创建切片、映射或通道时,并且需要它们立即可用,例如要在切片中存储数据,或者在映射中设置键值对。
- 例子:
s := make([]int, 10)
创建了一个长度和容量都是 10 的整数切片。
- 使用
总结:new
和 make
都是用于分配内存,但 new
返回的是指针,且适用于所有类型,而 make
只用于切片、映射和通道,并返回一个初始化的(非零值的)类型实例。