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

在Go语言中,make 和 new 是两个内置的内存分配函数,但它们的用途和行为有显著区别。理解它们的差异并正确使用,对编写高效、安全的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世界
一分钟搭建会展元宇宙
138
查看详情
常见用法:
- 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常量计数器讲解


2025-11-28
浏览次数:次
返回列表