乐闻世界logo
搜索文章和话题

Go 中的“ make ”和“ new ”函数有什么区别?

4 个月前提问
4 个月前修改
浏览次数14

1个答案

1

在Go语言中,makenew 都是用于分配内存的内建函数,但是它们的用途和行为有一些重要的区别。

new 函数

new 函数用于为一个指定类型的新变量分配内存空间,并返回一个指向这个空间的指针。这个新分配的内存被初始化为该类型的零值。new 可以用于任何类型的数据,包括基本类型、复合类型、指针、接口等。

举个例子,如果你想创建一个int类型的指针并初始化为其零值,可以这样使用new

go
ptr := new(int) fmt.Println(*ptr) // 输出: 0

make 函数

make 函数只用于初始化Go的三个引用类型的变量:切片(slice)、映射(map)和通道(chan),并返回一个初始化的(非零)值。这是因为这三种类型都指向数据结构,需要被初始化才能正确使用。make 不仅分配内存,还初始化相关属性,比如切片的长度和容量,映射的大小,通道的缓冲区大小等。

例如,创建一个切片并分配初始容量,可以使用make

go
s := make([]int, 0, 10) fmt.Println(len(s), cap(s)) // 输出: 0 10

总结

  • new 分配内存并返回指向该内存的指针,内存被初始化为类型的零值,适用于所有类型。
  • make 用于初始化切片、映射和通道,除了分配内存外,还进行特定的初始化,只适用于这三种类型。

通过使用这两个函数,Go语言能够提供更加灵活和高效的内存管理方式。

2024年8月7日 21:55 回复

你的答案