Go 语言中 new 和 make 的区别是什么?

推荐答案

在 Go 语言中,newmake 都是用于分配内存的内置函数,但它们的使用场景和功能有所不同。

  • new:用于分配内存并返回指向该内存的指针。它适用于所有类型,包括基本类型、结构体、数组等。new 分配的内存会被初始化为零值。

  • make:用于创建并初始化切片、映射和通道等引用类型的数据结构。make 返回的是初始化后的(非零值)对象,而不是指针。

本题详细解读

new 的使用

new 函数的签名如下:

new 接受一个类型作为参数,并返回一个指向该类型零值的指针。例如:

new 适用于所有类型,包括基本类型、结构体、数组等。它分配的内存会被初始化为零值。

make 的使用

make 函数的签名如下:

make 用于创建并初始化切片、映射和通道等引用类型的数据结构。它返回的是初始化后的对象,而不是指针。例如:

make 只能用于切片、映射和通道这三种引用类型,并且它会返回一个已经初始化好的对象,而不是指针。

区别总结

  • 适用类型new 适用于所有类型,而 make 仅适用于切片、映射和通道。
  • 返回值new 返回指向类型零值的指针,而 make 返回初始化后的对象。
  • 初始化new 分配的内存会被初始化为零值,而 make 会初始化对象并返回非零值。

通过理解 newmake 的区别,可以在 Go 语言中更准确地选择合适的内存分配方式。

纠错
反馈