Go语言(golang)中,make和new有什么区别呢

小编 3889

在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版本将支持泛型,对于断言的存在,则持负面态度,同时也为自己不提供类型继承来辩护。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部