Golang 中 new 和 make 的区别是什么?

Golang 中 new 和 make 的主要区别在于:

  • new 分配内存,不会初始化。
  • make 分配内存并初始化。

具体来说:
1、 new用于分配内存

p := new(T) 
  • 为类型T分配内存
  • 返回一个T类型的指针*T变量
  • 但不会初始化分配的内存

2、 make用于分配并初始化内存

a := make([]T, n)
c := make(chan T)
m := make(map[T]int)
  • 这三种用法分别用于分配切片, channel 和 map
  • 并初始化为其零值
  • 返回初始化后的值

3、 用法场景不同

  • new一般用于申请内存空间
  • make一般用于初始化内存

区别在于:

  • new只分配空间
  • make分配并初始化

举个例子:

p := new(int)
fmt.Println(*p) // 0

a := make([]int,10)      
fmt.Println(a) // [0 0 0 0 0 0 0 0 0 0]

这里 p 分配了内存,但 *p 的值未初始化。
而 a 首先分配了长度为10的切片,并将每个元素初始化为0。

总的来说, new 和 make 的主要区别在于:

  • new 只分配内存
  • make 同时分配并初始化内存

new 一般用于指针类型。
make 一般用于 slice、map 和 chan 类型。