大家好,我是明哥。

由于某些不可抗力,之前该专栏的所有内容都被删除了。因此之后的一段时间内,我会重新发布这些文章,先给已经看过的关注者提个醒。


本文原文: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

翻译一下注释内容

  1. 内建函数 make 用来为 slice,map 或 chan 类型(注意:也只能用在这三种类型上)分配内存和初始化一个对象
  1. 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 有什么区别?相关推荐

  1. 结构体中的函数指针(c语言里一种思想)

    阅读raft源码的时候看到结构体里面的void(*xx) 看不懂这个地方,看上去又像面向对象的类方法,但是这是c语言的结构体啊,了解了这是函数指针.小趴菜~ 一.函数指针 函数指针是指向函数的指针变量 ...

  2. c语言里单精度浮点数和双精度浮点数的区别

    单精度浮点数(float)和双精度浮点数(double)在C语言中是两种不同类型的数据.单精度浮点数占用4个字节的空间,精度范围在67位左右:双精度浮点数占用8个字节的空间,精度范围在1517位左右. ...

  3. c语言中怎么定义一个指针,C语言中,定义一个指针的时候为这个指针开辟...

    2016-08-03 10:00齐景宪 客户经理 区别:C语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在C语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针. ...

  4. 木老师教笨笨课堂——系列讲座(从函数指针到委托) 三、C++语言里的函数指针...

    先来回顾一下,我们说函数指针有一个重要的特性,它可以指向任何形参相同的函数.这样可以用统一的方式去调用不同的函数.(这个我还是希望笨笨同学好好思考一下,我想也是程序思想的精髓之一吧),就好比武功秘籍中 ...

  5. 木老师教笨笨课堂——系列讲座(从函数指针到委托) 二、C语言里的函数指针...

    二.C语言里的函数指针 上一节里介绍了回调函数,模块A提供了该函数 然后模块A调用B B再返过来调用A提供的函数,再处理最后返回结果给A.晕了.还是画个图.一般调用情况: 图2-1 有回调函数的调用情 ...

  6. 如何初始化局部变量c语言_【C语言更新】C语言中如何来定义一个指针,并且对其进行初始化...

    文/Edward上一节中,我们利用了一个小知识来介绍了一下指针,在上面这个例子中,小明和小丽手中的这个杯子就好比我们C语言中的变量,它确实是实实在在存放一些有具体意义的数据.这个杯套就类似于C语言中指 ...

  7. 【c语言】定义一个指针数组,指向5个不同的char型数组

    最近在准备复试的上机考试,顺便帮大一小孩做C语言作业. 其中有一道题目是将五个单词排序后输出 想到了利用<string.h>库函数中的strcmp,但是逐一比较只能找到最大值或最小值,没有 ...

  8. C语言中一个指针传递问题的分析

        指针在C语言中扮演着极为重要的角色,它的存在为C语言提供了极大的灵活性,当然,不少问题也是由指针所引起的(双刃剑).本文通过分析一个由指针传递所引起的错误,从而使得我们更加重视指针在编程中的传 ...

  9. c语言中减号算一个字符吗,C语言中指针的加减运算

    char arr[3]; printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2); char *parr[3]; printf(&q ...

最新文章

  1. Python元组字典
  2. java gif 帧_在Java中修复动画gif的帧速率
  3. 谷歌正式推出官方“Android界面设计”网站
  4. professor xi‘s story
  5. 如果你要实现IOC,请简单描述一下实现步骤?
  6. 2018Alibaba数学竞赛-决赛试题
  7. Django从理论到实战(part28)--ORM常用Field详解
  8. .net生成随机字符串
  9. 后端:REST API URI 设计的七准则
  10. leetcode初级算法3.存在重复元素
  11. Java实现:月,日,年,周,访问量统计
  12. 坑爹的水题之“元芳你怎么看”
  13. 从一套表达和通路数据学习常见的绘图展示方式和报错处理
  14. setattr()、getattr()、hasattr()【设置属性和方法、得到属性、判断是否有属性和方法】
  15. redis查看连接数
  16. python过滤敏感词汇_Python过滤敏感词汇
  17. 大数据入门的知识体系,大数据学习路线
  18. nodejs下载 安装 配置环境
  19. Alexa工具条嵌入浏览器技术解析
  20. Ardunio开发实例-WS2812B独立寻址LED调色调光

热门文章

  1. HTML5学习笔记简明版(10):废弃的元素和属性
  2. [SOJ]连通性问题
  3. TesCase-GUI(图形用户界面)测试
  4. python 监控jvm脚本
  5. python 时间序列分析之ARIMA(不使用第三方库)
  6. PDB命令行调试Python代码
  7. JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据
  8. 看看如何解决“SQL Server只能使用Windows身份登录,不能使用sa等Sql server身份进行登录”的问题...
  9. SgmlReader使用方法
  10. svn文件重进更改服务器路径,svn 设置 服务器路径