Go语言为什么推荐使用切片而不是数组_Golang值类型对比说明
发布时间 - 2026-02-01 00:00:00 点击率:次数组传参时被完整复制,原数组不受影响;切片仅复制header,修改可能影响原底层数组,共享底层数组时需警惕副作用。
为什么函数传参时数组会“失效”,而切片不会
因为数组是值类型,传参时整个内存块被复制;切片是引用类型,只复制 slice header(指针+len+cap),底层数据仍在原处。
- 修改传入的
[5]int参数,原数组完全不受影响 - 修改传入的
[]int参数,只要没触发扩容,append或索引赋值都会反映到原始底层数组上 - 注意陷阱:多个切片共享同一底层数组时,
s1[0] = 100可能意外改掉s2[0]—— 这不是 bug,是设计使然
make([]T, len, cap) 的三个参数怎么配才不踩坑
初学者常误以为 cap 是“预留空间上限”,其实它是切片能向右扩展的最大长度,且直接影响后续 append 是否触发扩容。
-
make([]int, 3)→len=3,cap=3:第 4 次append必定分配新底层数组 -
make([]int, 3, 8)→len=3,cap=8:还能追加 5 个元素而不 realloc - 容量不足时扩容策略:小切片(
cap )翻倍;大切片按 1.25 倍增长 —— 不可控,提前预估更稳
从数组创建切片时,arr[1:4] 的容量到底是多少
切片表达式 arr[i:j] 的容量不是原数组长度,而是 len(arr) - i。这是最容易算错的地方。
- 给定
arr := [6]int{0,1,2,3,4,5},s := arr[2:4]→len=2,cap=4(因为6 - 2 = 4) - 这意味着
s最多还能向右扩展 2 个元素:s = s[:4]合法,s = s[:5]panic:index out of range - 若需隔离底层数组避免副作用,用
appen或
d([]int(nil), s...)
copy创建独立副本
什么场景下必须用数组,而不是切片
不是“不能用数组”,而是多数业务逻辑不需要它;但以下情况绕不开:
- 定义固定长度的结构体字段,如
type IPv4 [4]byte—— 数组长度是类型一部分,可做 map key - 高性能计算中对齐访问,如 SIMD 处理像素矩阵
[1920x1080]uint8,栈上分配、零拷贝 - 常量集合声明:
const days = [7]string{"Sun", "Mon", ..., "Sat"},编译期确定,无运行时开销 - 切片无法替代数组的核心点:数组长度参与类型系统,
[3]int和[4]int是不同类型;切片[]int则无视长度
真正难的不是记住区别,而是意识到:当你写 var data []int 时,你拿到的只是一个轻量句柄;而它的底层数组可能正被五个 goroutine 同时读写——这时 cap、共享与拷贝,就不再是理论问题了。
# go
# golang
# go语言
# app
# 栈
# 区别
# 为什么
# String
# 常量
# const
# 结构体
# int
# 指针
# 值类型
# 引用类型
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
微信小程序 配置文件详细介绍
Android GridView 滑动条设置一直显示状态(推荐)
,网页ppt怎么弄成自己的ppt?
网站制作壁纸教程视频,电脑壁纸网站?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
活动邀请函制作网站有哪些,活动邀请函文案?
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
如何快速打造个性化非模板自助建站?
黑客入侵网站服务器的常见手法有哪些?
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
如何在企业微信快速生成手机电脑官网?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
jQuery 常见小例汇总
如何快速搭建自助建站会员专属系统?
郑州企业网站制作公司,郑州招聘网站有哪些?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
如何生成腾讯云建站专用兑换码?
如何用AWS免费套餐快速搭建高效网站?
JavaScript Ajax实现异步通信
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
EditPlus 正则表达式 实战(3)
千库网官网入口推荐 千库网设计创意平台入口
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
Laravel如何实现一对一模型关联?(Eloquent示例)
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
如何获取上海专业网站定制建站电话?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何破解联通资金短缺导致的基站建设难题?
如何快速搭建支持数据库操作的智能建站平台?
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
如何用腾讯建站主机快速创建免费网站?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
免费网站制作appp,免费制作app哪个平台好?
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
Android利用动画实现背景逐渐变暗
制作企业网站建设方案,怎样建设一个公司网站?
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
如何在IIS服务器上快速部署高效网站?
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
高防服务器如何保障网站安全无虞?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?


