go内置函数make和new的区别

Go语言中的makenew都是用于创建内存对象的内置函数。但是,它们之间存在一些区别:

  • make函数用于创建并初始化一个slice、map或channel类型的对象,而new函数用于创建一个指向给定类型的指针。例如:
// 使用make函数创建一个初始长度为0,容量为10的slice:
s := make([]int, 0, 10)

// 使用new函数创建一个指向int类型的指针:
p := new(int)
  • make函数的第一个参数必须是slice、map或channel类型,并且返回的是一个类型的实例,而new函数的第一个参数必须是一个类型,并返回一个指向该类型实例的指针。例如:
// 使用make函数创建一个初始长度为0,容量为10的slice:
s := make([]int, 0, 10)

// 使用new函数创建一个指向int类型的指针:
p := new(int)

// 因为make函数返回一个实例,所以我们可以直接使用实例来调用它的方法:
s.append(1)

// 因为new函数返回一个指针,所以我们必须使用间接调用来调用实例的方法:
(*p).Set(10)

总的来说,make函数用于创建和初始化一个slice、map或channel类型的对象