文档章节

Golang中new和make的区别

____追梦人
 ____追梦人
发布于 2015/05/21 16:25
字数 372
阅读 76
收藏 2

总结几点:
     new会分配结构空间,并初始化为清空为零,不进一步初始化
     new之后需要一个指针来指向这个结构
     make会分配结构空间及其附属空间,并完成其间的指针初始化
     make返回这个结构空间,不另外分配一个指针

例子new:
     var p *[]int = new([]int)
     或
     p := new([]int)
     以上分配了一个slice结构,但是结构中的应该指向底层数组的ptr指针为空,故实际不能往这个slice里面存取数据
     同时分配了一个指针p,也即(在32位系统中)占4个字节并存放slice结构的地址

例子make:
     var v []int = make([]int, 0)
     v := make([]int, 0)
     以上分配了一个slice结构,且结构中的应该指向底层数组的ptr指针已经指向了某个底层数组,这个底层数组应该已经分配了,故这个slice已经可以使用了
     注意v就是这个slice结构,而不是一个指向slice的指针
     上述仅是示例,一般使用时都会明确长度和容量:v := make([]int, 10, 50)

结论:
     由上可见,用new来分配slice的意义不大,因为没有恰当的初始化,无法直接使用
     有附带空间的结构,使用make来初始化,可以完成内部指针初始化,其后可以立即使用


本文转载自:http://blog.csdn.net/max2005/article/details/9171791

____追梦人
粉丝 18
博文 123
码字总数 21429
作品 0
青岛
Android工程师
私信 提问
Go圣经-学习笔记入门-面试题

常问面试题 函数返回return XX, 是原子操作吗?(不是, 如果你看过雨痕老师的内存管理,就知道) 普通函数和闭包函数的区别有哪些?后者的应用场景在哪里?(闭包函数使用外部变量,是引用传递...

cdh0805010
2017/10/20
371
0
【go】golang中置new()函数和make()函数的区别

Go语言中的内建函数new和make是两个用于内存分配的原语(allocation primitives),其功能相似,却有本质区别。 1、new 官方文档 // The new built-in function allocates memory. The first...

踏雪无痕SS
2018/11/06
0
0
Golang里面的指针具体什么用?

*和&什么区别什么使用使用???make,:=,new又有什么却别什么时候使用???

owenG
2015/07/16
881
3
年终盘点!2017年超有价值的Golang文章

年终盘点!2017年超有价值的Golang文章 鸟窝2017-12-281 阅读 Go 马上就要进入2018年了,作为年终的盘点,本文列出了一些2017年的关于Go编程的一些文章,并加上简短的介绍。 文章排名部分先后...

鸟窝
2017/12/28
0
0
golang入门学习笔记(二)

作者: 一字马胡 转载标志 【2017-11-22】 更新日志 日期 更新内容 备注 2017-11-22 新建文章 go语言入门学习笔记(二) golang入门学习笔记系列 golang入门学习笔记(一) interface for go...

一字马胡
2017/11/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

哪些情况下适合使用云服务器?

我们一直在说云服务器价格适中,具备弹性扩展机制,适合部署中小规模的网站或应用。那么云服务器到底适用于哪些情况呢?如果您需要经常原始计算能力,那么使用独立服务器就能满足需求,因为他...

云漫网络Ruan
今天
5
0
Java 中的 String 有没有长度限制

转载: https://juejin.im/post/5d53653f5188257315539f9a String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西...

低至一折起
今天
15
0
OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
11
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
8
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部