- new 和 make 都是在堆上分配内存,内存逃逸不讲,当然也可以了解一下。
- new 对指针类型分配内存,返回值是分配类型的指针,new也可以对 slice 、map、channel 分配内存;
- make 仅用于 slice、map和 channel 的初始化,返回值为类型本身,而不是指针;
在Go语言中,make
和new
是两个用于创建对象的内建函数,它们有不同的用途和行为。
-
make
:make
函数用于创建切片、映射和通道等引用类型的对象。它的语法是:make(T, args...)
,其中T
表示要创建的对象的类型,args...
表示传递给创建对象的参数。make
函数会分配内存并初始化对象,返回一个已经准备好使用的引用类型对象。例如:
slice := make([]int, 5) // 创建长度为5的整型切片
dictionary := make(map[string]int) // 创建字符串到整型的映射
channel := make(chan int) // 创建一个整型通道
-
new
:new
函数用于创建值类型的对象,并返回对象的指针。它的语法是:new(T)
,其中T
表示要创建的对象的类型。new
函数会分配内存,初始化该类型的零值,并返回指向该类型的指针。例如:
var count *int
count = new(int) // 创建一个整型对象,并将指针赋值给count变量
使用new
函数创建的对象是该类型的指针,需要通过解引用(*
)操作符访问该对象的值。new
函数适用于创建结构体、基本类型(如整型、浮点型等)的对象。
总结:
-
make
函数用于创建切片、映射和通道等引用类型的对象,并返回一个已初始化的对象。 -
new
函数用于创建值类型的对象,并返回一个指向该类型的指针,指向的对象会被初始化为零值。
需要根据具体的需求和对象类型选择使用make
还是new
函数。