make和new的区别

  相同点
 
  ● make和new都是向操作系统申请内存,并分配给变量。
 
 
 
  不同点
 
  ● make返回值类型和第1个形参类型相同,new返回值类型是第1个形参(也是唯一形参)类型的指针。
  func make(t Type, size ...IntegerType) Type
  func new(Type) *Type
 
  ● make只能用于创建map、slice、chan对象,new可用于创建任意数据类型对象(但通常只用于创建结构体对象)。



  总结

  ● make和new其实没有可比性,因为两者使用场景不同,只要记住创建map、slice、chan对象使用make即可,new通常只用于创建结构体对象,而且即便创建结构体对象也很少使用new,而是使用T{}的方式创建。



  FAQ

  Q:new可用于创建任意数据类型对象,那么可以用new来创建map、slice、chan对象吗?
  A:可以,但是使用new创建的map、slice、chan对象都是nil。往nil map插入元素会报panic,往nil chan读写数据都会阻塞,虽然nil slice可以通过append()使其变得可用,但是这样多此一举还不如直接用make。

Copyright © 2024 码农人生. All Rights Reserved