问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

golangmake和new的区别?

发布网友 发布时间:2024-09-26 04:53

我来回答

1个回答

热心网友 时间:2024-10-07 09:10

Golang中new和make的区别

new返回指针,任何类型

make返回值,可用于slice,maporchannel

Go中的make和new的区别

·new:是一个用来分配内存的内置函数,与C++不同的是,它不初始化内存,只是将其归零,也就相当于,new(X)会为X的新项目分配被归零的存储,且返回它的地址,其中,第一个参数是类型,返回值是类型的指针,其值被初始化为‘0’,对于不同的数据类型,0值的意义也是不一样的,比如int初始化为0,bool初始化为false等等。

·make:是Golang的内置函数,仅用于分配和初始化slice、map及channel类型的对象,三种类型都是结构,返回值为类型而不是指针,例如slice是一个三元描述符,包含一个指向数据(在数组中)的指针,长度以及容量,在这些项被初始化前,slice都是nil的,对于这三者,make初始化这些内部数据结构,并准备好可用的值。

需要注意的是,make只用于map、slice和channel,并且不反悔指针,想要获得一个显式的指针,使用new进行分配,或者显式地使用一个变量的地址。

new和make的区别?

它们都是内置函数,new按指定类型长度分配零值内存,返回指针,并不关系类型内部构造和初始化方式。而引用类型则必须使用make函数创建,编译器会将make转化为目标类型专用的创建函数(或指令),以保证完成全部内存分配和相关属性初始化。

new可以为引用类型分配内存,但这是不完整创建。以字典(map)为例,它仅分配了字典类型本身(实际就是个指针包装)所需内存,并没有分配键值存储内存,也没有初始化散列桶等内部属性,因此它无法正常工作。

p:=new(map[string]int)//函数new返回指针

m:=*p

m["a"]=1//panic:assignmenttoentryinnilmap(运行期错误

使用make初始化引用类型

切片的存储形式unsafe.pointerlencap

只声明不赋值时

使用make初始化时会分配底层数组

使用new初始化引用类型

使用new初始化引用类型(new的返回值就是slice结构的起始地址,不会分配底层数组,所以此时赋值时不允许的)

使用append的方式添加元素,可以分配底层数组

参考:【Golang】slice类型存什么?make和new?slice和数组?扩容规则?_哔哩哔哩_bilibili

new和make

new是一个内置的函数,它的函数签名如下:

funcnew(Type)*Type

其中,

Type表示类型,new函数只接受一个参数,这个参数是一个类型

*Type表示类型指针,new函数返回一个指向该类型内存地址的指针。

new函数不太常用,使用new函数得到的是一个类型的指针,并且该指针对应的值为该类型的零值。

make也是用于内存分配的,区别于new,它只用于slice、map以及chan的内存创建,而且它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型,所以就没有必要返回他们的指针了。make函数的函数签名如下:

funcmake(tType,size...IntegerType)Type

make函数是无可替代的,我们在使用slice、map以及channel的时候,都需要使用make进行初始化,然后才可以对它们进行操作。这个我们在上一章中都有说明,关于channel我们会在后续的章节详细说明。

相同点:

二者都是用来做内存分配的。

不同点:

make只用于slice、map以及channel的初始化,返回的还是这三个引用类型本身;

new用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针。

热心网友 时间:2024-10-07 09:13

Golang中new和make的区别

new返回指针,任何类型

make返回值,可用于slice,maporchannel

Go中的make和new的区别

·new:是一个用来分配内存的内置函数,与C++不同的是,它不初始化内存,只是将其归零,也就相当于,new(X)会为X的新项目分配被归零的存储,且返回它的地址,其中,第一个参数是类型,返回值是类型的指针,其值被初始化为‘0’,对于不同的数据类型,0值的意义也是不一样的,比如int初始化为0,bool初始化为false等等。

·make:是Golang的内置函数,仅用于分配和初始化slice、map及channel类型的对象,三种类型都是结构,返回值为类型而不是指针,例如slice是一个三元描述符,包含一个指向数据(在数组中)的指针,长度以及容量,在这些项被初始化前,slice都是nil的,对于这三者,make初始化这些内部数据结构,并准备好可用的值。

需要注意的是,make只用于map、slice和channel,并且不反悔指针,想要获得一个显式的指针,使用new进行分配,或者显式地使用一个变量的地址。

new和make的区别?

它们都是内置函数,new按指定类型长度分配零值内存,返回指针,并不关系类型内部构造和初始化方式。而引用类型则必须使用make函数创建,编译器会将make转化为目标类型专用的创建函数(或指令),以保证完成全部内存分配和相关属性初始化。

new可以为引用类型分配内存,但这是不完整创建。以字典(map)为例,它仅分配了字典类型本身(实际就是个指针包装)所需内存,并没有分配键值存储内存,也没有初始化散列桶等内部属性,因此它无法正常工作。

p:=new(map[string]int)//函数new返回指针

m:=*p

m["a"]=1//panic:assignmenttoentryinnilmap(运行期错误

使用make初始化引用类型

切片的存储形式unsafe.pointerlencap

只声明不赋值时

使用make初始化时会分配底层数组

使用new初始化引用类型

使用new初始化引用类型(new的返回值就是slice结构的起始地址,不会分配底层数组,所以此时赋值时不允许的)

使用append的方式添加元素,可以分配底层数组

参考:【Golang】slice类型存什么?make和new?slice和数组?扩容规则?_哔哩哔哩_bilibili

new和make

new是一个内置的函数,它的函数签名如下:

funcnew(Type)*Type

其中,

Type表示类型,new函数只接受一个参数,这个参数是一个类型

*Type表示类型指针,new函数返回一个指向该类型内存地址的指针。

new函数不太常用,使用new函数得到的是一个类型的指针,并且该指针对应的值为该类型的零值。

make也是用于内存分配的,区别于new,它只用于slice、map以及chan的内存创建,而且它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型,所以就没有必要返回他们的指针了。make函数的函数签名如下:

funcmake(tType,size...IntegerType)Type

make函数是无可替代的,我们在使用slice、map以及channel的时候,都需要使用make进行初始化,然后才可以对它们进行操作。这个我们在上一章中都有说明,关于channel我们会在后续的章节详细说明。

相同点:

二者都是用来做内存分配的。

不同点:

make只用于slice、map以及channel的初始化,返回的还是这三个引用类型本身;

new用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? Go语言入门教程08-指针 golang里面表示指针的*和&符号有什么区别 地震灾害具有哪些特点? 手机充电充不进去还越充越少咋回事 用翼支付能办信用卡吗,翼支付里面没钱也没绑 参加长跑比赛注意事项 跑1500米的时候可以走吗 网络介质中传输的是模拟信号还是数字信号 ETE区块链是什么 暴走大事件 流浪法师是什么组合 谁喜欢听南征北战的新出炉的歌《我的天坑》,你们觉得会不会成为LOL的主... 我的天坑这首歌,啥意思?我和男友以经分手了,他发这首歌给我干嘛啊... ...球球大作战》统一冰红茶孢子获得途径及图鉴是什么 ...球球大作战》是不是买统一冰红茶就能获得皮肤是什么 法国女歌手一首红遍全球的歌曲 姓桑二字名:只想给女儿取好名子,但是最好是两个字的 使用struts1如何在Action中实现国际化? Struts的国际化重要吗?? struts 2 国际化化 如何对搜索引擎 设置默认语言? 使用struts2国际化之后,如何用超链转换中英文 Golangunsafe包使用模式详解 一文了解Golang的panic&recover 详解Golang中WaitGroup源码设计 苹果手机,可货到付款,开机试机满意付款 价格:1750元 这是真的么_百度... ...1500-2000左右的安卓机子,屏幕4寸左右,别太小了 索尼相机,我买的是dsc-wx7,1750元,只带了一根绳,一张4g卡,连个包也没... 现在人民币对美元汇率提高到了6.6以内,是不是代表本币贬值 ...发现脖子后面左侧一根大动脉的旁边有一个硬硬的,圆圆的东西..._百... 左侧脖子上突出了一个好像小球大小的肿块。当初是应为煮东西烫伤了手... 脖子左侧有一块东西用手触摸会活动,但是不疼不痒不知是长什么了,已经发... 脖子左侧有个小结节用手能摸出来还会动 孩五岁,今发现脖子左侧有花生米大的滑动的溜溜,请问这是什么?_百度知 ... 感觉看女医明妃传有种看韩剧的感觉。。。特别是刘诗诗。。感觉很韩... 为什么最近的一些片子比如《女医明妃传》里的服装让人觉得像韩国... 目前为止wow的传说级装备共有几件呢?麻烦把名字说出来,谢谢啦!_百度... WOw为什么只能装备一件军团再临传说装备 wow有哪些传说装备? WOW5.0到5.4版本要多久才能拿传说披风?如题 谢谢了 wow职业大厅恶魔命运你可以装备的传说物品+1什么意思 什么是传说物品... 魔兽世界5.4版本传说披风任务在哪开始?具体流程? 还有,随机的决战奥 ...