make 和 new 的区别?

在Go语言中,new 和 make 是两个用于分配内存的内建函数,它们分别用于不同类型的数据结构,主要用途如下:

new 关键字

new 用于分配内存,但不初始化内存,返回的是指针。 主要用于创建值类型(如结构体、数组、基本类型等)的实例。 返回值: 返回的是指向类型零值的指针。 示例:

// 示例:创建一个指向 int 的指针
ptr := new(int)
*ptr = 10

make 函数

用途: make 用于创建切片、映射和通道等引用类型的数据结构。
在内部分配内存,并对其进行初始化,返回的是对应的引用类型(切片、映射、通道)。
返回值: 返回的是引用类型(切片、映射、通道)本身,而不是指针。 示例:

// 示例:创建一个切片
slice := make([]int, 5, 10)

总结

  • new 可以用于任何类型的分配内存,而 make 仅限于切片、映射和通道等引用类型。
  • 返回值: new 返回指向零值的指针,而 make 返回初始化后的引用类型本身。
  • 初始化: new 不进行内部的初始化,而 make 在分配内存后会进行必要的初始化操作。
  • 适用场景:
    • 使用 new 时,你通常需要对零值进行修改或者设置,比如对结构体字段进行赋值。
    • 使用 make 时,你通常会在切片、映射和通道等引用类型上进行操作,并且需要确保它们被正确地初始化。