当前位置: 首页 > news >正文

go slice在函数间的传递模式

在 Go 语言中,slice 是值传递(所有类型都是值传递),但修改 slice 的元素可以影响到外部。

详细解释

1. 值传递的本质

当你传递 slice 给函数时,传递的是 slice 头的副本。slice 头包含三个字段:

  • 指向底层数组的指针
  • 长度(len)
  • 容量(cap)
typesliceHeaderstruct{Datauintptr// 指向底层数组的指针LenintCapint}

2. 修改元素 -可以影响外部

funcmodifyElement(s[]int){s[0]=100// 修改底层数组的元素}funcmain(){nums:=[]int{1,2,3}modifyElement(nums)fmt.Println(nums)// [100 2 3] ✅ 外部被影响}

原因:副本中的Data指针指向同一个底层数组。

3. 修改长度/容量 -不能影响外部

funcmodifyLen(s[]int){s=append(s,4)// 可能改变 len 和 cap,甚至指向新数组s[0]=100}funcmain(){nums:=[]int{1,2,3}modifyLen(nums)fmt.Println(nums)// [1 2 3] ❌ 外部不受影响}

4. 使用指针才能完全修改

funcmodifySlice(s*[]int){*s=append(*s,4)// 修改原 slice(*s)[0]=100}funcmain(){nums:=[]int{1,2,3}modifySlice(&nums)fmt.Println(nums)// [100 2 3 4] ✅ 完全受控}

总结

  • 修改元素:✅ 影响外部(共享底层数组)
  • 修改长度/容量:❌ 不影响外部(副本的 len/cap 独立)
  • 重新赋值整个 slice:❌ 不影响外部(副本的 Data 指针改变)
  • 需要完全修改时:使用指针*[]T或返回新 slice

这种设计兼顾了性能和安全性,是最常见的 Go 语言实践。

http://www.jsqmd.com/news/885552/

相关文章:

  • Linux文件系统与权限超详解:inode、软硬链接、文件权限、用户组、底层原理
  • 无人驾驶汽车高速工况智能决策与轨迹规划与跟踪控制方法【附代码】
  • C++ STL源码阅读(持续更新)
  • 记录一次 Windows + WSL2 网络异常:WSL 无法访问局域网节点的排查与修复
  • 电子电路工程师工作全解析:从原理图到量产的硬核全过程
  • 整理录音证据总太慢写不完?专业整理对比评测告诉你方法
  • 程序员相亲,我说用AI写代码,对方以为我吹牛
  • 操作符从浅入深的讲解
  • 团队协作中如何使用 Taotoken CLI 工具一键统一所有成员的开发环境配置
  • 缓存与数据库双写不一致问题及终极解决方案(高频面试题)
  • 告别手动更新!用Synopsys AXI Slave Agent的Memory模型,让你的验证环境自动响应读写事务
  • 2026质感瓷砖选购全解析:核心判断维度+高端品牌信息,避坑选购有参考 - 寻茫精选
  • ClickHouse 性能优化完全指南:从数据模型到生产调优
  • AI当代,怎么利用好AI工具管理好项目沟通及沟通计划?
  • 别再为FLEXPART编译头疼了!手把手教你用Ubuntu 22.04搞定依赖库和WRF模式编译
  • claude code用户如何迁移到taotoken解决封号与token不足问题
  • 真空定型系统在 PP 蜂窝板生产中的关键参数与调试方法
  • Bannerlord联机技术指南:主机托管架构下的硬核调优五步法
  • 2026年静压式液位计国产品牌综合实力排名与深度选型指南 - 仪表品牌榜
  • FModel终极指南:5步掌握虚幻引擎游戏资源提取的完整解决方案
  • 如何用SMUDebugTool深度掌控你的AMD Ryzen处理器性能
  • 开发者视角:5 款垂直聚合导航网站的实用体验分享
  • 机器学习在射电天文数据分类中的应用:以MIGHTEE巡天SFG/AGN分类为例
  • 吃透Docker!从原理、安装、核心命令到镜像制作、网络实战(保姆级入门教程)
  • 艾尔登法环帧率优化完全指南:从卡顿到丝滑的终极解决方案
  • 5分钟掌握SPT-AKI存档编辑器:离线塔科夫终极修改工具完整指南
  • 0 基础跨行斩获万元薪资,真正拉开差距的是破局思维
  • 巴中房屋渗漏与白蚁滋生全解析|本地气候通病成因、避坑要点与专业修缮方案 - 鲁顺
  • 浩卡联盟怎么开一级代理权限?官方手把手教你注册一级0抽成(官方邀请码16888) - 流量卡代理招商
  • ABAP实现OAuth 2.0 Authorization Code流程实战