Go语言(golang)中,make和new有什么区别呢
在Go语言(golang)中,make和new有以下区别:1.初始化的区别;2.分配内存的区别;3.返回类型的区别;4.语法上的区别;5.实用性的区别。初始化的区别体现于,new分配的空间会被清零;而make分配空间后,会进行初始化。
1.初始化的区别
make和new都是golang用来分配内存的內建函数,且在堆上分配内存。但不同的是,new分配空间后,是将内存清零,并没有初始化内存;而make分配空间后,是初始化内存,而不是清零。
2.分配内存的区别
new(T)为每个类型分配一片内存,而make专门用于为slice,map和chan三种类型分配内存。
3.返回类型的区别
new返回的是指向类型的指针;而make的返回类型与其参数的类型相同,而不是指向它的指针,因为这三种数据类型本身就是引用类型。简单理解就是:new返回指针,而make返回的是类型。
4.语法上的区别
new的语法是:func new(Type) *Type;而make的语法为:func make(t Type, size …IntegerType) Type。
5.实用性的区别
目前来看new函数并不常用,大家更喜欢使用短语句声明的方式。但是make就不一样了,它的地位无可替代,在使用slice、map以及channel的时候,还是要使用make进行初始化,然后才可以对他们进行操作。
延伸阅读
Go语言相比其它编程语言有什么特点
Go语言,又称Golang,它是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。
Go的语法接近C语言,但对于变量的声明有所不同。Go支持垃圾回收功能。Go的并行模型是以东尼·霍尔的通信顺序进程(CSP)为基础,采取类似模型的其他语言包括Occam和Limbo,但它也具有Pi运算的特征,比如通道传输。在1.8版本中开放插件(Plugin)的支持,这意味着现在能从Go中动态加载部分函数。
与C++相比,Go并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能,但增加了切片(Slice) 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持。Go 2.0版本将支持泛型,对于断言的存在,则持负面态度,同时也为自己不提供类型继承来辩护。