new() 和 make的区别

本文基于Go 1.14.2

从源码描述可以得出

  • new(T) 为每个新的类型T分配一片内存,初始化为 0 并且返回类型为*T的内存地址:这种方法 返回一个指向类型为 T值为 0 的地址的指针,它适用于值类型如数组和结构体;它相当于 &T{}
  • make(T) 返回一个类型为 T 的初始值,它只适用于3种内建的引用类型:切片、map 和 channel

参考the way to go 7.2.4章节的图解

在图 7.3 的第一幅图中:

在第二幅图中, p := make([]int, 0) ,切片 已经被初始化,但是指向一个空的数组(p!=nil)。

 

我们再通过测试代码验证上述结论

使用dlv 跟踪断点

 


欢迎订阅我的公众号,文章更新早知道
张贴在Go源码标签:

版权声明: 本文为【陈思敏捷】的原创文章。
原文链接:【https://www.chenjie.info/2375】。原文标题:【new() 和 make的区别】。文章转载请联系作者。


发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据