新闻中心

Golang new与make在创建数据结构时有何区别_Golang new make使用场景与差异说明

2025-11-29
浏览次数:
返回列表
new返回指向零值的指针,适用于所有类型;make用于初始化slice、map、channel并返回可用实例。1. new(T)分配内存并返回*T,仅置零;2. make(T, args)构造可操作的数据结构,返回T本身;3. 对复合类型如map或slice用make,否则需额外初始化。

golang new与make在创建数据结构时有何区别_golang new make使用场景与差异说明

在 Golang 中,newmake 都用于内存分配,但它们的使用场景和行为有本质区别。理解它们的差异对正确初始化数据结构至关重要。

new 的作用与特点

new 是一个内置函数,用于为指定类型的变量分配内存,并返回指向该类型零值的指针。它适用于所有类型,但不会进行特殊初始化。

• 调用 new(T) 会分配一块内存,存储类型 T 的零值。
• 返回 *T 类型的指针,即指向 T 零值的地址。
• 不支持 slice、map 和 channel 的初始化,因为这些类型需要额外的结构信息(如长度、容量、底层数据结构)。

例如:

GoEnhance GoEnhance

全能AI视频制作平台:通过GoEnhance AI让视频创作变得比以往任何时候都更简单。

GoEnhance 347 查看详情 GoEnhance
ptr := new(int)
*ptr = 10
// ptr 指向一个 int 类型的零值(初始为 0),之后被赋值为 10

make 的作用与特点

make 也是一个内置函数,但它仅用于初始化三种内建引用类型:slice、map 和 channel。它的目的是创建并初始化这些类型的实例,使其可以立即使用。

• make(T, args) 返回类型 T 本身,而不是指针。
• 为 slice 分配底层数组并设置长度和容量。
• 为 map 创建哈希表结构以便存储键值对。
• 为 channel 设置缓冲区(可选)并准备通信机制。

例如:

slice := make([]int, 5)     // 长度为5的切片,元素均为0
m := make(map[string]int)   // 空的 map,可直接插入键值对
ch := make(chan int, 3)     // 带缓冲的 channel

使用场景对比

选择 new 还是 make,取决于你要初始化的数据类型。

• 使用 new:当你需要一个指向任意类型零值的指针,尤其是结构体或基本类型时。
• 使用 make:当你需要初始化 slice、map 或 channel 并马上使用其操作(如 append、写入 map、发送接收 channel)时。

常见误区:

• 对 map 使用 new:var m = new(map[string]int) 得到的是 *map[string]int,但该指针指向的 map 仍是 nil,无法直接赋值,必须配合 make 使用或改用 make。
• 对 slice 使用 new:new([]int) 返回的切片为 nil,不能直接 append,需先 make。

总结差异

• 返回类型不同:new 返回指针(*T),make 返回原始类型(T)。
• 支持类型不同:new 支持所有类型;make 仅支持 slice、map、channel。
• 初始化程度不同:new 只分配内存并置零;make 会构造可用的数据结构。

基本上就这些。new 更通用但基础,make 更专一但实用。根据类型选择合适的方式,才能写出安全高效的 Go 代码。

以上就是Golang new与make在创建数据结构时有何区别_Golang new make使用场景与差异说明的详细内容,更多请关注其它相关文章!


# 你要  # 本溪网站优化多少钱  # 推广网站的四个阶段  # 网站内部优化判断题  # 优化网站静态资源  # 有关营销推广的文献  # 信阳短视频seo矩阵  # 郴州企业营销推广公司排名  # 网站营销建设的总结  # 搜狗seo优化技巧搜狗  # 深圳seo自然搜索优化排名  # 相关文章  # 均为  # go  # 尤其是  # 是一个  # 的是  # 适用于  # 当你  # 键值  # 数据结构  # 键值对  # 区别  # app  # golang 


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


相关推荐: Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】  Python字典中优雅地迭代剩余元素的方法  Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】  cad怎么合并重叠的线段_cad清理重复重叠线条的操作方法  抖音从哪里进入网页版_抖音官方入口链接  为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法  QQ邮箱网页版入口登录 QQ邮箱在线邮箱官方通道  MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId  QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录  c++中的std::basic_string的SSO优化_c++短字符串优化深度解析  小米14应用无法联网原因分析_小米14网络权限修复  C++如何使用AddressSanitizer(ASan)_C++调试工具中检测内存访问错误的利器  C++如何比较两个字符串_C++ string compare函数与操作符对比  如何使用Go和Martini动态服务解码后的图片  QQ邮箱登录官网首页 腾讯QQ邮箱网页入口  黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】  腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法  知音漫客官网漫画下载_知音漫客网页版阅读记录  高德地图沿途添加点失败如何解决 高德多点规划方法  LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置  拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达  TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程  如何将HTML表格多行数据保存到Google Sheets  俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口  NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰  一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化  CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠  深入理解J*aScript中的B样条曲线与节点向量生成  Lar*el 8 多关键词数据库搜索优化实践  sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置  Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换  Win11输入法不见了怎么办_Windows11恢复语言栏显示方法  PyTorch模型训练效果不佳?深入剖析常见错误与调试技巧  ACG动漫视频网入口 ACG动漫*免费正版观看地址  PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果  中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】  在J*a中如何开发在线活动报名与管理系统_活动报名管理项目实战解析  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  优化 Jest 模拟:强制未实现函数抛出错误以提升测试效率  Shopware订单对象中获取产品自定义字段的正确方法  win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法  QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口  微信网页版官方快速登录入口 微信网页版网页版账号直达  微信网页版官方入口直达 微信网页版网页版登录使用方法  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  4399网页游戏电脑版全新入口 4399电脑端在线玩指南  利用5118提升短视频内容效果_5118短视频关键词优化方法  深入理解J*a链表中的IPosition接口与使用  顺丰快递查单号物流信息 顺丰快递小程序查询入口  深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射 

搜索