golang中make和new的区别
golang中make和new的区别
一、从使用上来看
make只能为slice
、map
、chan
类型分配内存,查看make方法可知它的返回值就是自己本身,
func make(t Type, size ...IntegerType) Type
new可以为多种数据类型分配内存,例如struct``[]int
等,new方法返回的是类型的指针
func new(Type) *Type
二、从内存管理来看
new分配内存和其他语言的原理不太一样,它并不初始化内存,而是将内存置零,这说明所有被new分配的变量都有一个为”零“的初始值。根据effective go中的举得例子bytes.Buffer
的文档说道,“Buffer
的零值是一个可以使用的空缓冲”,类似的,sync.Mutex
没有显式的构造器和Init
方法。相反的,sync.Mutex
的零值被定义为一个未加锁的互斥。
make分配内存的话,它是对结构初始化数据结构的引用,例如make内有三个数据结构,指针,len(),cap(),初始化时可执行make([]slice,10,20)
分配容量以及长度。