new与make的进行分配的区别

c3P0ElsonGo · · 1410 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

看了一下Effective Go,感觉还是收获很多,其中看到new与make的分配空间的区别..我就整理了一下. new是go内置函数,用于创建一块内存空间,特性如下 new(T) 那么new就会返回星T的值,就是这块内存的地址,类型是(星T,因为符号打不出开),因为在解析的时候是需要类型的解析方式.所以这里就不多总结了.并将new的内存数据置0,我理解的置0应该是将你的数据不同类型就对应不同的0,比如int类型就0,string类型就"",别的可能就nil..不知道是否理解错误. make绝大多数用于slice,make,channel的创建,特性如下 make接收一个T类型,它会返回一个T类型,并返回一个初始化(并不是置0)的T类型的值, 因为slice是数组的一个区间(我理解是一个结构体吧),slice有3个属性(文档中是写描述符,但是不知道是不是我理解的一样),1是指向数组的指针,2是数组的长度,3是slice的容量,为什么需要容量应该是跟java集合的负载因子同样道理,make是会返回T类型的值是包含这3项的,最重要的就是初始化,所以make应该是用于slice,map,channel的创建了. var p_new 星[]int = new([]int) //创建一个内存空间,存储[]int数组,并返回地址给p_new,元素都置0 var p_make []int = make([]int,5,100)创建一个内存空间,里面存放数组,5个元素,空间大小为100*类型字节, 新手学Go,可能理解不正确,请纠正~~

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1410 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传