Go new和make的区别

来源:互联网 发布:淘宝店铺产品分类设置 编辑:程序博客网 时间:2024/06/05 03:35

   Go语言中new和make是内建的两个函数,主要用来创建分配类型内存。


变量的声明

  

   变量的声明我们可以通过var关键字,然后就可以在程序中使用。当我们不指定变量的默认值时,这些变量的默认值都是它们的零值,比如int类型的零值是0,string类型的零值是"",引用类型的零值是nil。

   

   这个例子会打印出什么?0还是10?。以上全错,运行的时候会painc,原因如下:


   从这个提示中可以看出,对于引用类型的变量,我们不光要声明它,还要为它分配内容空间,否则我们的值放在哪里去呢?对于值类型的声明不需要,是因为已经默认帮我们分配好了。


new


   它只接受一个参数,这个参数是一个类型,分配好内存后,返回一个指向该类型内存地址的指针。同时请注意它同时把分配的内存置为零,也就是类型的零值。


make

   make也是用于内存分配的,但是和new不同,它只用于chan、map以及切片的内存创建,而且它返回的类型就是这三个类型本身,而不是它们的指针,因为这三种类型就是引用类型,所以就没必要返回它们的指针了。

   注意,因为这三种类型是引用类型,所以必须得初始化,但是不是置为零值,这个和new是不一样的。



二者异同

    二者都是内存的分配(堆上),但是make只用于slice、map以及channel的初始化(非零值);而new用于类型的内存分配,并且内存置为零。

   make返回的还是这三个引用类型本身;而new返回的是指向类型的指针。


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 胆囊壁粗糙 粗糙读音 被粗糙汉子h 粗糙的读音 粗糙怎么读 胆囊粗糙 粗糙度等级 粗糙度单位 粗糙的反义词 宝宝皮肤粗糙像癣图片 粗糙的近义词 又粗糙有又大进进出出 粗糙度对照表 脚后跟起皮粗糙怎么回事 表面粗糙度等级对照表 婴儿皮肤粗糙一块一块 手粗糙用什么可以变细腻 手特别干燥粗糙小妙招 表面粗糙度符号 皮肤粗糙什么原因 女性股沟粗糙发黑像死皮 圣女被粗糙绳结走绳 脸粗糙怎么才能变光滑小妙招 粗糙什么意思 女主娇糯男主粗糙古言h 女主娇糯男主粗糙古言 婴儿脸颊发红粗糙图片 小孩皮肤干燥粗糙图片 宝宝皮肤干燥粗糙图片 穿成小哥嫁给乡下粗糙汉子 受被迫嫁给乡下粗糙汉子 粗纺面料 粗纺 魔兽世界粗线 粗线 粗线银板鱼 死亡之寒粗线 粗线毛衣织法 粗线棒针毛衣 女士粗线外套毛衣编织 粗线编织手链