在Go语言中,make
和 new
都是用于分配内存的内建函数,但是它们的用途和行为有一些重要的区别。
new
函数
new
函数用于为一个指定类型的新变量分配内存空间,并返回一个指向这个空间的指针。这个新分配的内存被初始化为该类型的零值。new
可以用于任何类型的数据,包括基本类型、复合类型、指针、接口等。
举个例子,如果你想创建一个int类型的指针并初始化为其零值,可以这样使用new
:
goptr := new(int) fmt.Println(*ptr) // 输出: 0
make
函数
make
函数只用于初始化Go的三个引用类型的变量:切片(slice)、映射(map)和通道(chan),并返回一个初始化的(非零)值。这是因为这三种类型都指向数据结构,需要被初始化才能正确使用。make
不仅分配内存,还初始化相关属性,比如切片的长度和容量,映射的大小,通道的缓冲区大小等。
例如,创建一个切片并分配初始容量,可以使用make
:
gos := make([]int, 0, 10) fmt.Println(len(s), cap(s)) // 输出: 0 10
总结
new
分配内存并返回指向该内存的指针,内存被初始化为类型的零值,适用于所有类型。make
用于初始化切片、映射和通道,除了分配内存外,还进行特定的初始化,只适用于这三种类型。
通过使用这两个函数,Go语言能够提供更加灵活和高效的内存管理方式。
2024年8月7日 21:55 回复