[Go - note] go中new和make分配变量的区别

Arboat · · 441 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

New

与其他语言中的同名方法不同是,go中的new不会初始化内存,而仅仅是赋予零值,也就是说返回一个新分配的类型的零值的指针(*T)。这样创建的变量可以不用进一步初始化就可以直接使用。

但有时需要初始化为非零值则可以用composite literal方式。
filed name 可根据是否需要按key:value 方式填写。

`new(File)`and`&File{}`

是相同的表达

Make

make只用来创建slice, map, 和channel,并且返回的初始化的值(T)
而非零值(*T),因为这几种类型的都需要初始化才能使用。


make([]int, 10, 100)

返回的是length 10 , capacity100的slice, 而new([]int)返回一个指向零值的slice。

下面的例子可以看出区别

var p *[]int = new([]int)       // allocates slice structure; \*p == nil; rarely useful
var v  []int = make([]int, 100) // the slice v now refers to a new array of 100 ints

// Unnecessarily complex:
var p *[]int = new([]int)
*p = make([]int, 100, 100)

// Idiomatic:
v := make([]int, 100)

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

本文来自:Segmentfault

感谢作者:Arboat

查看原文:[Go - note] go中new和make分配变量的区别

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

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