Golang数组和切片有什么区别_Golang数组切片对比教程【通俗】

数组传参改不了原值,切片能改但可能意外影响别人;大数组应传指针或转切片;截取切片需防重叠;用copy隔离数据;len是当前长度,cap是容量上限;预估最大量设cap可避免频繁扩容;数组可比较、作map键,切片不可。数组传参改不了原值,切片能改但可能意外影响别人Go里arr 3int传进函数后,函数里改的是副本,外面完全没变;而s \[\]int传进去,改的是底层数组,原切片能看到变化------但危险在于:如果多个切片共享同一底层数组,一个append或赋值可能悄悄改掉另一个的元素。大数组别直接传参,要么传*1024byte指针,要么转成切片再传截取切片时注意重叠:a := arr1:3和b := arr2:4共用arr2,改a1等于改b0需要隔离数据?用copy(dst, src)新建独立切片,别依赖make(\[\]T, len(src))后直接赋值len和cap不是一回事,扩容时机全看cap够不够len(s)是你现在能读写的元素个数,cap(s)是"还能往里塞多少而不换底层数组"。很多bug就出在以为len == cap,结果append后返回的新切片指向了新地址,老变量还指着旧内存。s := make(\[\]int, 0, 5):长度0、容量5,第一次append(s, 1)不扩容,底层数组还是那块s := \[\]int{1,2,3}:长度3、容量也是3,再append必然扩容,底层数组大概率换地方频繁追加?预估最大量设好cap,比如日志缓冲make(\[\]byte, 0, 4096),省掉多次复制初始化写法决定底层是否复用,零值行为也完全不同数组零值是3int{0,0,0},切片零值是nil。这直接影响if s == nil判断和append行为------对nil切片append是安全的,但对nil数组?压根不能nil数组,它必须有长度。var s \[\]int → s是nil,len(s)==0且cap(s)==0,可直接appendvar a 3int → a是3int{0,0,0},不能append,也不能nil比较s := \[\]int(nil)和s := \[\]int{}都合法,但前者cap==0,后者cap通常为小整数(如2),影响首次扩容策略什么时候非用数组不可?固定大小+可比较+当map键切片不能做map的键,也不能用==直接比较;数组可以。典型场景:SHA256哈希值32byte、RGB颜色3uint8、矩阵行4float64。 Vozo Vozo是一款强大的AI视频编辑工具,可以帮助用户轻松重写、配音和编辑视频。

相关推荐
BK贝壳3 小时前
亿级用户签到位图选型复盘:用 bool-hybrid-array 扛冷启动打卡,也把它和 Roaring/Redis 的边界测清楚了
数据结构·python·性能优化·numpy
2601_966949654 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
程序员清风7 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
正在走向自律8 小时前
数据集成产品的技术底座:从日志解析原理到 KFS 同步链路搭建(含建表与增删改查完整代码)
数据库·oracle·信创·数据集成·国产数据库·kingbasees·全量+增量同步
程序员塔塔喵8 小时前
【MySQL篇|第七篇】MySQL事务
数据库·mysql·mysql事务
在世修行9 小时前
智学文枢:页面切换与跨页数据预填
python·桌面应用·signal·1024程序员节·pyside·跨页跳转·状态预填
2601_962885729 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
独隅9 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
打工仔折腾 AI9 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
_孤傲_9 小时前
快速掌握 MySQL 语法
数据库·后端·mysql