1. new 和 make 都是在堆上分配内存,内存逃逸不讲,当然也可以了解一下。
  2. new 对指针类型分配内存,返回值是分配类型的指针,new也可以对 slice 、map、channel 分配内存;
  3. make 仅用于 slice、map和 channel 的初始化,返回值为类型本身,而不是指针;

在Go语言中,makenew是两个用于创建对象的内建函数,它们有不同的用途和行为。

  1. makemake函数用于创建切片、映射和通道等引用类型的对象。它的语法是:make(T, args...),其中T表示要创建的对象的类型,args...表示传递给创建对象的参数。make函数会分配内存并初始化对象,返回一个已经准备好使用的引用类型对象。例如:
slice := make([]int, 5)          // 创建长度为5的整型切片
dictionary := make(map[string]int) // 创建字符串到整型的映射
channel := make(chan int)          // 创建一个整型通道
  1. newnew函数用于创建值类型的对象,并返回对象的指针。它的语法是:new(T),其中T表示要创建的对象的类型。new函数会分配内存,初始化该类型的零值,并返回指向该类型的指针。例如:
var count *int
count = new(int) // 创建一个整型对象,并将指针赋值给count变量

使用new函数创建的对象是该类型的指针,需要通过解引用(*)操作符访问该对象的值。new函数适用于创建结构体、基本类型(如整型、浮点型等)的对象。

总结:

  • make函数用于创建切片、映射和通道等引用类型的对象,并返回一个已初始化的对象。
  • new函数用于创建值类型的对象,并返回一个指向该类型的指针,指向的对象会被初始化为零值。

需要根据具体的需求和对象类型选择使用make还是new函数。