码迷,mamicode.com
首页 > 其他好文 > 详细

go new() 和 make() 的区别

时间:2019-06-25 15:21:02      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:不同   div   class   函数   类型   两种   适用于   初始   内存地址   

看起来二者没有什么区别,都在堆上分配内存,但是它们的行为不同,适用于不同的类型。

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

          换言之,new 函数分配内存,make 函数初始化;下图给出了区别:

技术图片

上两个图:

上图中:

var p *[]int = new([]int) // *p == nil; with len and cap 0
p := new([]int)

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

以上两种方式实用性都不高。下面的方法:

var v []int = make([]int, 10, 50)

或者

v := make([]int, 10, 50)

这样分配一个有 50 个 int 值的数组,并且创建了一个长度为 10,容量为 50 的 切片 v,该 切片 指向数组的前 10 个元素。

 

go new() 和 make() 的区别

标签:不同   div   class   函数   类型   两种   适用于   初始   内存地址   

原文地址:https://www.cnblogs.com/setevn/p/11082699.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!