一文详解Golang中new和make的区别.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

一文详解Golang中new和make的区别

目录1.简介2.new函数2.1new函数的作用2.2new函数的语法3.make函数3.1make函数的作用3.2make函数的语法4.区别对比4.1分配的类型4.2返回值类型4.3使用场景4.4示例代码对比5.总结

1.简介

在Go语言中,new和make是用于创建对象的两个内建函数,它们的使用方式和作用有所不同。正确理解new和make的区别对于编写高效的Go代码非常重要。下面我们将逐步介绍new和make的具体细节。

2.new函数

2.1new函数的作用

new函数用于创建一个指定类型的指针,并将其初始化为零值。它返回指向新分配的内存地址的指针。

2.2new函数的语法

new函数的语法非常简单,只需在关键字new后面跟上类型即可。

?funcnew(Type)*Type

下面是一个使用new函数创建结构体对象的示例代码:

?packagemain

?importfmt

?typePersonstruct{

???Namestring

???Age?int

?funcmain(){

???p:=new(Person)

???fmt.Println(p)

?}

在上述代码中,我们使用new函数创建了一个指向Person类型的指针p,并输出其值。运行结果为{0},表明p是一个指向Person类型零值的指针。

3.make函数

3.1make函数的作用

make函数用于创建内建类型(如切片、映射和通道)的对象,它返回一个已初始化的(非零值)对象。

3.2make函数的语法

make函数的语法与new函数有所不同,它需要指定类型和一些额外的参数。

?funcmake(Type,sizeIntegerType)Type

下面是一些使用make函数创建切片、映射和通道的示例代码:

?packagemain

?importfmt

?funcmain(){

???//创建一个长度为5,容量为10的整型切片

???s:=make([]int,5,10)

???fmt.Println(s)

???

???//创建一个键为string,值为int的映射

???m:=make(map[string]int)

???m[a]=1

???m[b]=2

???fmt.Println(m)

???

???//创建一个字符串通道

???c:=make(chanstring)

???fmt.Println(c)

?}

在上述代码中,我们使用make函数创建了一个长度为5,容量为10的整型切片s,一个键为string,值为int的映射m,并创建了一个字符串通道c。运行结果分别为[00000],map[a:1b:2]和0xc0000460c0,表明这些对象都被初始化为非零值。

4.区别对比

4.1分配的类型

new函数用于任何类型的分配,并返回一个指向该类型的指针。make函数只用于分配切片、映射和通道,并返回初始化后的切片、映射或通道对象。

4.2返回值类型

new函数返回指向分配类型的指针。make返回分配类型的初始化后的非零值。

4.3使用场景

new函数主要用于创建值类型的实例。值类型包括基本类型(如整型、浮点型、布尔型等)以及结构体。new函数返回一个指向新分配内存的指针,可以方便地对该实例进行操作和修改。

?packagemain

?importfmt

?typePointstruct{

???X,Yint

?funcmain(){

???p:=new(Point)

???p.X=10

???p.Y=20

???fmt.Println(p)//输出:{1020}

?}

make函数主要用于创建引用类型的对象。引用类型包括切片、映射和通道。由于引用类型需要在使用之前进行初始化,make函数返回的是初始化后的非零值对象,而不是指针。

?packagemain

?importfmt

?funcmain(){

???//创建一个长度为5,容量为10的整型切片

???s:=make([]int,5,10)

???f

文档评论(0)

158****0778 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档