新闻中心
Golang中的new与make有何区别_Golang内存分配函数使用详解
new分配零值内存返回指针,适用于任意类型;make初始化slice、map、channel并返回可用对象。

在Go语言中,new 和 make 都是用于内存分配的内置函数,但它们的用途和行为有本质区别。理解它们的不同,对正确使用Go的数据结构和避免运行时错误非常重要。
new 的作用与使用方式
new(T) 是一个通用的内存分配函数,它为类型 T 分配零值内存,并返回指向该内存的指针 *T。
它的主要特点包括:
- 只做内存分配,不初始化复杂结构(如 slice、map、channel)
- 分配的内存会被初始化为类型的零值(如 int 为 0,指针为 nil)
- 适用于任意类型,尤其是结构体和基础类型
例如:
ptr := new(int) *ptr = 10 fmt.Println(*ptr) // 输出 10
这里 new(int) 分配了一个 int 大小的内存空间,值为 0,返回 *int 类型的指针,之后可以通过解引用赋值。
make 的作用与使用方式
make(T, args...) 专门用于初始化 slice、map 和 channel 三种引用类型。它不仅分配内存,还会进行必要的内部结构初始化,使这些类型可以立即使用。
关键点:
- 仅支持 slice、map、channel 三种类型
- 返回的是类型本身,而不是指针
- 确保返回的对象处于可用状态(如 map 可以直接添加键值对)
示例:
Reachout.ai
一个AI驱动的视频开发平台,专为忙碌的企业家和销售团队打造
142
查看详情
slice := make([]int, 5) // 长度为5的切片 m := make(map[string]int) // 空的 map ch := make(chan int, 10) // 缓冲区为10的通道
如果不用 make 而直接声明,比如 var m map[string]int,此时 m 是 nil,不能直接赋值,会 panic。
new 与 make 的核心区别对比
| 对比项 | new | make |
|---|---|---|
| 适用类型 | 任意类型 | 仅 slice、map、channel |
| 返回值 | *T(指针) | T(类型本身) |
| 初始化程度 | 仅零值 | 完全可使用的状态 |
| 是否能用于 map/slice/channel | 分配内存但不可用(如 map 为 nil) | 初始化后可直接使用 |
举个典型错误例子:
var m map[string]int m["key"] = 1 // panic: assignment to entry in nil map
正确做法是:
m := make(map[string]int) m["key"] = 1 // 正常
如何选择 new 还是 make
基本原则是:
- 需要创建 slice、map 或 channel 并立即使用 → 用 make
- 需要为结构体或基本类型分配堆内存并获取指针 → 用 new
- 不确定时,优先考虑是否需要指针或是否是三种引用类型
注意:Go 中大多数情况下不需要显式使用 new,因为变量声明和字面量构造已足够。new 更多用于需要返回堆对象指针的函数中。
基本上就这些。掌握 new 和 make 的区别,关键是理解“分配”和“初始化”的不同层次。make 不只是分配,更是让引用类型进入可用状态的关键步骤。
以上就是Golang中的new与make有何区别_Golang内存分配函数使用详解的详细内容,更多请关注其它相关文章!
# 内存管理
# 靖江网站营销推广
# 沙井seo优化工具
# 建设网站公司怎么收费
# 宜宾短视频推广营销招聘
# 湖南微信网站建设
# 网站优化去哪注册软件
# 短剧推广的营销方法包括
# 星空网站建设素材
# 注册哈尔滨建设信息网站
# 山东seo排名电话
# 尤其是
# 有何区别
# go
# 是一个
# 都是
# 的是
# 适用于
# 键值
# 三种
# 数据结构
# 键值对
# 区别
# go语言
# golang
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
poki网页游戏推荐_poki免费游戏平台入口
Sublime Text怎么显示空格和制表符_Sublime显示不可见字符设置
C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用
windows10怎么查看硬盘序列号_windows10硬盘id查询命令
MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId
拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧
我的世界官方游戏入口 我的世界官网平台直达链接
整合Supabase认证与Django模型:跨模式迁移的解决方案
深入理解J*a编译器的兼容性选项:从-source到--release
知音漫客正版漫画平台_知音漫客官网账号登录
2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC
Spyder启动失败:字体文件权限拒绝错误解决方案
《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!
Angular Material 垂直步进器:实现底部到顶部排序的教程
使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性
Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践
Go语言中的*string:深入理解字符串指针
qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程
在Runstone环境中高效处理TasteDive API的JSON数据
网站内容防复制粘贴的实现策略与局限性
快手官方唯一登录入口 谨防山寨钓鱼网站
夸克浏览器图书入口 夸克手机浏览器阅读入口
C++如何操作注册表_Windows平台下C++读写注册表的API函数详解
Composer中的^和~符号代表什么_精通Composer版本号语义化约束
怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】
Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性
铃兰之剑为这和平的世界希里技能组及加点推荐
b站怎么看视频的弹幕数量_b站弹幕数量查看方法
为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法
谷歌浏览器怎么给标签页静音_Chrome标签静音快捷操作
b站怎么删除评论_b站评论管理与删除操作
高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法
抖音网页版快捷访问 抖音网页版网页版入口操作教程
Golang如何使用net/url解析URL_Golang URL解析与处理方法
利用Bokeh CustomJS动态控制DataTable列可见性
python3时间如何用calendar输出?
iwriter统一登录平台 iwrite账号密码登录页面
12306选座系统怎么选连座_12306选座多人连坐操作方法
迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法
火锅吃太多会怎样 火锅吃太多会上火吗
《GTA6》开发画面疑似泄露!这次可不是AI了
字由网在线版登录地址 字由网网页版安全入口
优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题
天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】
批改网学生版PC登录 批改网官网登录系统入口
文本文档写html代码怎么运行_文本文档html代码运行步骤【教程】
Python自定义类排序:解决lambda键值访问TypeError的实践指南
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
TikTok网页版直接登录 TikTok网页端官方平台入口
打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门


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