怎么new一个指针_19. Go语言里的 make 和 new 有什么区别?
大家好,我是明哥。
由于某些不可抗力,之前该专栏的所有内容都被删除了。因此之后的一段时间内,我会重新发布这些文章,先给已经看过的关注者提个醒。
本文原文:http://golang.iswbm.com
Github:http://github.com/iswbm/GolangCodingTime
1. new 函数
在官方文档中,new 函数的描述如下
// The new built-in function allocates memory. The first argument is a type,
// not a value, and the value returned is a pointer to a newly
// allocated zero value of that type.
func new(Type) *Type
可以看到,new 只能传递一个参数,该参数为一个任意类型,可以是Go语言内建的类型,也可以是你自定义的类型
那么 new 函数到底做了哪些事呢:
- 分配内存
- 设置零值
- 返回指针(重要)
举个例子
import "fmt"type Student struct {name stringage int
}func main() {// new 一个内建类型num := new(int)fmt.Println(*num) //打印零值:0// new 一个自定义类型s := new(Student)s.name = "wangbm"
}
2. make 函数
在官方文档中,make 函数的描述如下
//The make built-in function allocates and initializes an object
//of type slice, map, or chan (only). Like new, the first argument is
// a type, not a value. Unlike new, make's return type is the same as
// the type of its argument, not a pointer to it.
func make(t Type, size ...IntegerType) Type
翻译一下注释内容
- 内建函数 make 用来为 slice,map 或 chan 类型(注意:也只能用在这三种类型上)分配内存和初始化一个对象
- make 返回类型的本身而不是指针,而返回值也依赖于具体传入的类型,因为这三种类型就是引用类型,所以就没有必要返回他们的指针了
注意,因为这三种类型是引用类型,所以必须得初始化(size和cap),但是不是置为零值,这个和new是不一样的。
举几个例子
//切片
a := make([]int, 2, 10) // 字典
b := make(map[string]int)// 通道
c := make(chan int, 10)
3. 总结
new:为所有的类型分配内存,并初始化为零值,返回指针。
make:只能为 slice,map,chan 分配内存,并初始化,返回的是类型。
另外,目前来看 new 函数并不常用,大家更喜欢使用短语句声明的方式。
a := new(int)
*a = 1
// 等价于
a := 1
但是 make 就不一样了,它的地位无可替代,在使用slice、map以及channel的时候,还是要使用make进行初始化,然后才可以对他们进行操作。
好了,今天的文章就到这里了。
若今天的分享对你有帮助,不如点个赞,支持一下?
怎么new一个指针_19. Go语言里的 make 和 new 有什么区别?相关推荐
- 结构体中的函数指针(c语言里一种思想)
阅读raft源码的时候看到结构体里面的void(*xx) 看不懂这个地方,看上去又像面向对象的类方法,但是这是c语言的结构体啊,了解了这是函数指针.小趴菜~ 一.函数指针 函数指针是指向函数的指针变量 ...
- c语言里单精度浮点数和双精度浮点数的区别
单精度浮点数(float)和双精度浮点数(double)在C语言中是两种不同类型的数据.单精度浮点数占用4个字节的空间,精度范围在67位左右:双精度浮点数占用8个字节的空间,精度范围在1517位左右. ...
- c语言中怎么定义一个指针,C语言中,定义一个指针的时候为这个指针开辟...
2016-08-03 10:00齐景宪 客户经理 区别:C语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在C语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针. ...
- 木老师教笨笨课堂——系列讲座(从函数指针到委托) 三、C++语言里的函数指针...
先来回顾一下,我们说函数指针有一个重要的特性,它可以指向任何形参相同的函数.这样可以用统一的方式去调用不同的函数.(这个我还是希望笨笨同学好好思考一下,我想也是程序思想的精髓之一吧),就好比武功秘籍中 ...
- 木老师教笨笨课堂——系列讲座(从函数指针到委托) 二、C语言里的函数指针...
二.C语言里的函数指针 上一节里介绍了回调函数,模块A提供了该函数 然后模块A调用B B再返过来调用A提供的函数,再处理最后返回结果给A.晕了.还是画个图.一般调用情况: 图2-1 有回调函数的调用情 ...
- 如何初始化局部变量c语言_【C语言更新】C语言中如何来定义一个指针,并且对其进行初始化...
文/Edward上一节中,我们利用了一个小知识来介绍了一下指针,在上面这个例子中,小明和小丽手中的这个杯子就好比我们C语言中的变量,它确实是实实在在存放一些有具体意义的数据.这个杯套就类似于C语言中指 ...
- 【c语言】定义一个指针数组,指向5个不同的char型数组
最近在准备复试的上机考试,顺便帮大一小孩做C语言作业. 其中有一道题目是将五个单词排序后输出 想到了利用<string.h>库函数中的strcmp,但是逐一比较只能找到最大值或最小值,没有 ...
- C语言中一个指针传递问题的分析
指针在C语言中扮演着极为重要的角色,它的存在为C语言提供了极大的灵活性,当然,不少问题也是由指针所引起的(双刃剑).本文通过分析一个由指针传递所引起的错误,从而使得我们更加重视指针在编程中的传 ...
- c语言中减号算一个字符吗,C语言中指针的加减运算
char arr[3]; printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2); char *parr[3]; printf(&q ...
最新文章
- Python元组字典
- java gif 帧_在Java中修复动画gif的帧速率
- 谷歌正式推出官方“Android界面设计”网站
- professor xi‘s story
- 如果你要实现IOC,请简单描述一下实现步骤?
- 2018Alibaba数学竞赛-决赛试题
- Django从理论到实战(part28)--ORM常用Field详解
- .net生成随机字符串
- 后端:REST API URI 设计的七准则
- leetcode初级算法3.存在重复元素
- Java实现:月,日,年,周,访问量统计
- 坑爹的水题之“元芳你怎么看”
- 从一套表达和通路数据学习常见的绘图展示方式和报错处理
- setattr()、getattr()、hasattr()【设置属性和方法、得到属性、判断是否有属性和方法】
- redis查看连接数
- python过滤敏感词汇_Python过滤敏感词汇
- 大数据入门的知识体系,大数据学习路线
- nodejs下载 安装 配置环境
- Alexa工具条嵌入浏览器技术解析
- Ardunio开发实例-WS2812B独立寻址LED调色调光
热门文章
- HTML5学习笔记简明版(10):废弃的元素和属性
- [SOJ]连通性问题
- TesCase-GUI(图形用户界面)测试
- python 监控jvm脚本
- python 时间序列分析之ARIMA(不使用第三方库)
- PDB命令行调试Python代码
- JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据
- 看看如何解决“SQL Server只能使用Windows身份登录,不能使用sa等Sql server身份进行登录”的问题...
- SgmlReader使用方法
- svn文件重进更改服务器路径,svn 设置 服务器路径