Go make 和 new 的区别
2023-10-09 21:54:03
在Go语言中,make和new都是用来分配内存的内置函数,但它们之间存在一些区别。
make用于分配切片、映射和通道等复合数据类型,而new用于分配基本数据类型和结构体等非复合数据类型。
make会自动初始化分配的内存,而new则不会。因此,在使用new分配内存时,需要手动初始化分配的内存。
make可以接受可变参数,而new只能接受一个参数。
make返回的是指向分配的内存的指针,而new返回的是分配的内存本身。
例如,以下代码使用make分配了一个长度为10的切片:
slice := make([]int, 10)
以下代码使用new分配了一个长度为10的结构体:
type Point struct {
x int
y int
}
point := new(Point)
在大多数情况下,make和new都是可以互换的。但是,在某些情况下,需要使用make或new中的一个来分配内存。例如,当需要分配一个空切片时,必须使用make,而当需要分配一个基本数据类型时,必须使用new。
Go make 和 new 的区别
在 Go 语言中,make 和 new 都是用来分配内存的内置函数,但它们之间存在一些区别。
用途
- make 用于分配复合数据类型,如切片、映射和通道。
- new 用于分配非复合数据类型,如基本数据类型和结构体。
初始化
- make 会自动初始化分配的内存。
- new 不会自动初始化分配的内存。
参数
- make 可以接受可变参数。
- new 只接受一个参数。
返回值
- make 返回指向分配的内存的指针。
- new 返回分配的内存本身。
效率
- make 比 new 更高效。
适用场景
- make 通常用于分配复合数据类型,如切片、映射和通道。
- new 通常用于分配非复合数据类型,如基本数据类型和结构体。
优缺点
- make 的优点是效率高,并且可以自动初始化分配的内存。
- make 的缺点是只能用于分配复合数据类型。
- new 的优点是可以用于分配任何类型的数据,并且可以手动初始化分配的内存。
- new 的缺点是效率较低,并且需要手动初始化分配的内存。
总结
make 和 new 都是 Go 语言中用来分配内存的内置函数,但它们之间存在一些区别。make 用于分配复合数据类型,new 用于分配非复合数据类型。make 会自动初始化分配的内存,而 new 则不会。make 可以接受可变参数,而 new 只接受一个参数。make 返回指向分配的内存的指针,而 new 返回分配的内存本身。make 比 new 更高效。make 通常用于分配复合数据类型,如切片、映射和通道。new 通常用于分配非复合数据类型,如基本数据类型和结构体。make 的优点是效率高,并且可以自动初始化分配的内存。make 的缺点是只能用于分配复合数据类型。new 的优点是可以用于分配任何类型的数据,并且可以手动初始化分配的内存。new 的缺点是效率较低,并且需要手动初始化分配的内存。