• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Golang > Go语言中new()和 make()的区别详解

Go语言中new()和 make()的区别详解

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了go语言 make,go语言,go语言环境搭建,go语言程序设计,let it go 25种语言等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

概述

Go 语言中的 new 和 make 一直是新手比较容易混淆的东西,咋一看很相似。不过解释两者之间的不同也非常容易。

new 的主要特性

首先 new 是内建函数,你可以从 http://golang.org/pkg/builtin/#new 这儿看到它,它的定义也很简单:
func new(Type) *Type
</div>

官方文档对于它的描述是:

内建函数 new 用来分配内存,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配类型零值的指针
</div>

根据这段描述,我们可以自己实现一个类似 new 的功能:
func newInt() *int {
  var i int
  return &i
}

someInt := newInt()
</div>

我们这个函数的功能跟 someInt := new(int) 一模一样。所以在我们自己定义 new 开头的函数时,出于约定也应该返回类型的指针。

make 的主要特性

make 也是内建函数,你可以从 http://golang.org/pkg/builtin/#make 这儿看到它,它的定义比 new 多了一个参数,返回值也不同:
func make(Type, size IntegerType) Type
</div>

官方文档对于它的描述是:

内建函数 make 用来为 slice,map 或 chan 类型分配内存和初始化一个对象(注意:只能用在这三种类型上),跟 new 类似,第一个参数也是一个类型而不是一个值,跟 new 不同的是,make 返回类型的引用而不是指针,而返回值也依赖于具体传入的类型,具体说明如下:
Slice: 第二个参数 size 指定了它的长度,它的容量和长度相同。
你可以传入第三个参数来指定不同的容量值,但必须不能比长度值小。
比如 make([]int, 0, 10)

Map: 根据 size 大小来初始化分配内存,不过分配后的 map 长度为 0,如果 size 被忽略了,那么会在初始化分配内存时分配一个小尺寸的内存

Channel: 管道缓冲区依据缓冲区容量被初始化。如果容量为 0 或者忽略容量,管道是没有缓冲区的
</div>

总结

new 的作用是初始化一个指向类型的指针(*T),make 的作用是为 slice,map 或 chan 初始化并返回引用(T)。

</div>

您可能想查找下面的文章:

  • GO语言make()分配用法实例
  • Go语言中new()和 make()的区别详解

相关文章

  • golang使用正则表达式解析网页
  • golang简单读写文件示例
  • 深入解析Go语言编程中slice切片结构
  • 服务器端Go程序对长短链接的处理及运行参数的保存
  • Go语言编程中字符串切割方法小结
  • Golang算法问题之数组按指定规则排序的方法分析
  • Go语言导出内容到Excel的方法
  • go语言里包的用法实例
  • go语言读取json并下载高清妹子图片
  • Go语言入门教程之Arrays、Slices、Maps、Range操作简明总结

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Go语言中数组的基本用法演示
    • go语言操作redis连接池的方法
    • Go语言实现字符串切片赋值的方法小结
    • Go语言共享内存读写实例分析
    • go语言环境搭建简述
    • Go语言开发环境搭建与初探(Windows平台下)
    • Go语言截取字符串函数用法
    • GO语言实现的端口扫描器分享
    • go语言使用scp的方法实例分析
    • Go中map数据类型3点小知识

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有