新闻中心

Golang中new和make有什么区别_Golang内存分配函数对比说明

2025-12-08
浏览次数:
返回列表
new用于任意类型,返回指向零值内存的指针;make仅用于slice、map、channel,返回已初始化的值本身。

golang中new和make有什么区别_golang内存分配函数对比说明

在Go语言中,new和make都是用于内存分配的内置函数,但它们的应用场景、行为和返回值有本质区别。理解这些差异是掌握Go内存管理的关键。

适用类型不同

这是两者最根本的区别。

  • make 只能用于三种内置引用类型:slice(切片)、map(映射)和channel(通道)。它负责创建并完全初始化这些复杂的数据结构。
  • new 可以用于任何类型,包括基本类型(如int、bool)、复合类型(如struct、array)等。它是一个通用的内存分配器,为指定类型分配零值填充的内存空间。

返回值类型不同

它们返回的内容完全不同,这直接影响了后续如何使用它们。

AdMaker AI AdMaker AI

从0到爆款高转化AI广告生成器

AdMaker AI 65 查看详情 AdMaker AI
  • make 返回的是类型本身。例如,make([]int, 5) 返回一个长度为5的切片变量,你可以直接对这个切片进行操作。
  • new 返回的是一个指向新分配内存的指针。例如,new(int) 返回一个 *int 类型的指针,指向一个值为0的整数。

初始化程度不同

两者的初始化工作量不一样。

  • make 做的工作更多。对于slice,它会分配底层数组并设置好长度和容量;对于map,它会创建并初始化内部的哈希表;对于channel,它会准备好通信所需的缓冲区和同步机制。调用make后,得到的对象可以直接使用。
  • new 只做最基础的初始化。它仅仅分配一块内存,并将这块内存清零(即设置为对应类型的零值,如int为0,string为空字符串,指针为nil)。对于像slice、map这样的引用类型,如果错误地使用new,只会得到一个值为nil的header,无法直接使用,尝试操作会引发panic。

基本上就这些,记住核心点:初始化slice、map、channel用make;需要为其他任意类型分配内存并获取其指针时用new。实践中,new的使用频率远低于make,因为直接声明或取地址通常更简洁。

以上就是Golang中new和make有什么区别_Golang内存分配函数对比说明的详细内容,更多请关注其它相关文章!


# 都是  # 个人网站建设地址  # 吕梁seo网络推广公司  # 谷歌百度seo  # 识图搜索衣服关键词排名  # 推广策略和营销目标  # 优化简历网站图片大小  # seo代表什么动物  # 品牌类营销怎么做推广的  # 小卡车营销推广方案  # seo带来客户  # 这是  # 检测方法  # go  # 返回值  # 值为  # 有什么区别  # 布尔  # 它会  # 的是  # 数据结构  # 同步机制  # 区别  # go语言  # golang 


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


相关推荐: vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法  WordPress插件开发:正确注册卸载钩子与避免常见陷阱  sublime怎么预览Markdown渲染效果_Markdown Preview插件 for sublime教程  PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误  QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录  C++如何实现单例模式_C++设计模式之线程安全的单例写法  AngularJS $http POST请求数据传递与Go后端接收实践  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  Win11 BitLocker密码忘了怎么办 Win11找回BitLocker恢复密钥方法【解决】  Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  PHP中获取MongoDB服务器运行时间(Uptime)的专业指南  MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具  如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】  豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售  Mac怎么锁定备忘录_Mac备忘录加密设置教程  夸克浏览器网页版最新地址 夸克浏览器官方入口合集  mc.js官网登录入口 mc.js官方登录入口最新版  优化Django表单:提交验证失败后保留用户输入  可靠CSGO开箱平台解析 CSGO开箱网合集  怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】  css滚动动画效果怎么实现_使用Animate.css滚动触发动画类  在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析  j*a toString()的覆盖  sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件  TikTok搜索不到用户发布内容怎么办 TikTok用户内容搜索优化方法  理解J*aScript Promise的微任务队列与执行顺序  Win11怎么修改默认浏览器_Windows 11设置Chrome为默认  PHP URL参数传递与500错误调试指南  C++如何实现线程池_C++11手动实现一个简单的固定大小线程池  如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略  漫蛙2正版漫画站 漫蛙2网页版快速访问入口  解决Django多数据库/多Schema环境下外键迁移问题  php源码怎么看淘宝客系统_看php源码淘宝客系统技巧  使用J*aScript检测输入元素是否包含在特定类中  中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】  J*a应用集成GitHub CLI与API认证指南  Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation  押井守高度称赞《辐射4》:玩了八年都停不下来!  b站怎么取消点赞_b站点赞取消操作方法  Python多版本共存与虚拟环境管理深度指南  Yandex浏览器官方网页版入口 Yandex浏览器最新版官网  大麦的“候补”是什么意思 大麦候补购票规则【详解】  PySpark中高效提取字符串右侧可变长度数字:使用regexp_extract  如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力  知乎APP怎么管理已购盐选内容_知乎APP盐选内容购买记录与查看方法  Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】  使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战  C++指针和引用有什么区别_C++内存管理核心概念深度解析  在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案  使用Python高效删除Word宏并转换DOCM为DOCX格式 

搜索