相同点
● 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。