首页 关于我们 成功案例 网络营销 电商设计 新闻中心 联系方式
QQ联系
电话联系
手机联系

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

发布时间:2025-12-08 12:21
发布者:网络
浏览次数:
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内存分配函数对比说明的详细内容,更多请关注其它相关文章!


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