Go语言数组和切片有什么区别_Golang集合类型基础对比-Golang

数组长度是类型的一部分,切片不是;声明[3]int和[4]int不兼容,不能赋值;切片[]int类型统一,可自由传参;除非需固定长度语义,否则函数参数一律用[]t;数组传参拷贝全部元素,切片只拷贝24字节header。

数组长度是类型的一部分,切片不是

这是最直接影响编译和赋值行为的区别。声明 [3]int 和 [4]int 是两个完全不兼容的类型,不能互相赋值或传参:

  • var a [3]int 和 var b [4]int —— a = b 直接报错:cannot use b (variable of type [4]int) as [3]int value
  • []int 无论背后是 5 个还是 500 个元素,类型始终是 []int,可自由赋值、传参、返回

所以函数参数该用数组还是切片?除非你**明确需要固定长度语义**(比如处理 16 字节 UUID 或 RGB 像素),否则一律用 []T —— 否则每次改个长度就得改函数签名。

传参时数组拷贝整个内存,切片只拷贝头结构

数组是值类型,传参即复制全部元素;切片是引用类型,传参只复制 24 字节的 header(指针 + len + cap):

  • 传 [1000]int 进函数:栈上拷贝 8KB(假设 int64),开销大且无必要
  • 传 []int 进函数:只拷贝 header,原底层数组仍在堆上,修改元素会影响调用方

注意:这不是“传引用”或“传指针”的语法糖,而是底层结构决定的——slice 结构体里本身就含指针字段。所以别写 *[]int,那是套娃,通常没意义。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » Go语言数组和切片有什么区别_Golang集合类型基础对比-Golang
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4032779+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4032779+
  • 本周更新: 0+
  • 最后更新: 2026-03-16