新闻中心

Golang如何使用内置make与new函数_Golang make new函数使用实践

2025-11-28
浏览次数:
返回列表
new分配零值内存并返回指针,适用于任意类型;make初始化slice、map、channel并返回原类型,仅用于引用类型。示例:new(int)返回*int,初始为0;make(map[string]int)创建可操作的map。关键区别:new返回指针且仅清零,make返回非指针并完成初始化。错误使用如new(map)会导致nil panic。实践中优先用短变量声明替代new,而make在需预设容量时必不可少,正确使用可避免运行时错误。

golang如何使用内置make与new函数_golang make new函数使用实践

在Go语言中,makenew 是两个内置的内存分配函数,但它们的用途和行为有显著区别。理解它们的差异并正确使用,对编写高效、安全的Go代码至关重要。

new函数:为类型分配零值内存

new 的作用是为指定类型分配一片内存空间,并将该内存清零(即赋予类型的零值),然后返回指向该内存的指针。

其函数签名如下:

func new(T) *T

它适用于任何类型 T,返回一个指向新分配的、零值的 T 类型变量的指针。

示例:

ptr := new(int)<br>fmt.Println(*ptr) // 输出 0<br>*ptr = 42<br>fmt.Println(*ptr) // 输出 42

这里 new(int) 分配了一个 int 类型的内存空间,初始值为 0,返回 *int 类型的指针。

注意:new 不适用于 map、slice 或 channel,因为这些类型的零值无法直接使用(如 map 的零值是 nil,不能直接赋值)。

make函数:初始化引用类型

make 用于初始化 slice、map 和 channel 这三种引用类型,使其处于可用状态。它不返回指针,而是返回类型本身。

其函数签名:

func make(T, args...)

其中 T 必须是 slice、map 或 channel。

N世界 N世界

一分钟搭建会展元宇宙

N世界 138 查看详情 N世界

常见用法:

  • slice:make([]int, len, cap) 创建长度为 len、容量为 cap 的切片
  • map:make(map[string]int) 创建可读写的 map
  • channel:make(chan int, 10) 创建带缓冲的 channel

示例:

slice := make([]int, 5, 10)<br>m := make(map[string]int)<br>ch := make(chan int, 5)

如果不使用 make 直接声明引用类型,它们的值为 nil,无法直接操作:

var m map[string]int<br>m["key"] = "value" // panic: assignment to entry in nil map

make 与 new 的关键区别

  • 返回类型不同:new 返回指针(*T),make 返回原类型(T)
  • 适用类型不同:new 可用于任意类型,make 仅用于 slice、map、channel
  • 初始化程度不同:new 只分配并清零,make 会进行类型特定的初始化,使值可用

举例说明:

ptr := new(map[string]int)<br>fmt.Println(ptr)     // 输出指针地址<br>fmt.Println(*ptr)   // 输出 map[string]int(nil)</br>(*ptr)["test"] = 1 // panic: assignment to entry in nil map

即使用了 new,map 仍是 nil。必须用 make 才能真正初始化:

m := make(map[string]int)<br>m["test"] = 1 // 正常工作

使用建议与实践

大多数情况下,不需要手动使用 new。Go 支持短变量声明和自动取址,更推荐直接声明变量或使用复合字面量。

比如代替 new(int):

i := 0<br>ptr := &i

对于结构体,也推荐使用字面量方式:

type Person struct { Name string }<br>p := &Person{Name: "Alice"}

而 make 在处理 slice、map、channel 时不可或缺,尤其是在需要预设容量或缓冲大小时,合理使用 make 能提升性能。

基本上就这些。掌握 make 和 new 的区别,能避免常见 nil 指针或运行时 panic,写出更稳健的 Go 程序。

以上就是Golang如何使用内置make与new函数_Golang make new函数使用实践的详细内容,更多请关注其它相关文章!


# 用了  # 谷歌关键词广告分析排名  # 长治营销短视频推广运营  # 崇明网站推广优化seo  # 北京短视频营销推广公司  # 贵州seo排名优化平台  # 南平画室网站建设  # 珠海优化网站价格  # 如何推广网站制作视频  # 连云港营销推广加盟  # 外贸网站建设制作  # 中文网  # go  # 相关文章  # 推荐使用  # 不需要  # 是在  # 值为  # 清零  # 适用于  # 如何使用  # 区别  # go语言  # golang 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台  Golang如何使用context实现超时取消_Golang context超时取消模式实践  响应式容器内容自动缩放与宽高比维持教程  在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明  steam官方网页快速访问 steam账号注册全流程  b站怎么删除评论_b站评论管理与删除操作  聚水潭ERP登录页面入口 聚水潭ERP官网登录界面  漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接  在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析  动漫花园资源网使用步骤_动漫花园资源网下载流程  HTML元素状态管理:根据DIV内容动态启用/禁用按钮  谷歌google账号注册详细步骤 谷歌账号注册官方教程  俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口  Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】  PHP 枚举:根据字符串获取枚举案例的策略与实现  大象笔记网页版入口 印象笔记网页版登录入口  css链接悬停下划线样式如何自定义_使用::after结合content和transition  j*a toString()的覆盖  Tabulator表格日期时间排序问题及自定义解决方案  铁路12306官网网页端快速入口 铁路12306官方首页登录教程  Lar*el Form Request中唯一性验证在更新操作中的正确实现  汽水音乐网页版使用入口_汽水音乐电脑版播放指南  CSS Box Model与弹性按钮:维持布局稳定的动画实践  LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比  微信语音通话掉线如何解决 微信语音通话稳定优化方法  J*a应用程序首次运行自动创建文件与目录的最佳实践  Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持  J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程  《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情  绝地鸭卫平a核爆刀流玩法攻略  解决J*aScript中重复选择项的确认对话框显示问题  晋江读书网页版在线登录 晋江读书电脑版官网  Python中如何避免重复条件判断:利用数据结构实现动态逻辑  126邮箱手机版登录官网2026_126手机邮箱免费入口最新  使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战  怎么在mac上运行html代码_mac运行html代码方法【指南】  如何在 Excel Online 和 Google 表格中更改日期格式  如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】  圆通快递查询实时追踪 圆通物流包裹状态快速查看  俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口  在J*a中如何使用Stream.map转换元素_Stream映射操作解析  cad怎么合并重叠的线段_cad清理重复重叠线条的操作方法  MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId  Mac终端命令大全_Mac常用Terminal指令速查  如何在J*a中实现统一对象行为接口_项目大型化时的接口规范化  解决Bootstrap卡片顶部边距导致背景图下移的问题  mc.js游戏直达 mc.js网页免下载版本秒进地址  Linux如何排查内存不足OOME问题_LinuxOOM分析教程  word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法  Golang如何使用const iota_Go iota常量计数器讲解 

搜索