You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言函数修改参数为何有的生效有的不生效?

Go两种传参修改结果差异的原因

Go语言所有函数参数均为值传递,两种示例的表现差异源于传递的参数类型本质不同:

结构体传参未生效的原因

  • 第一个示例中changeName接收Person结构体类型参数,属于值类型。调用changeName(person)时,会完整拷贝原始person结构体生成独立副本传入函数
  • 函数内修改p.firstName的操作作用于副本,完全不影响原始person变量,因此最终输出{Alice Dow},结构体未被修改。

切片传参修改生效的原因

  • 切片是Go的引用类型,其底层结构由三个字段组成:指向底层数组的指针、切片长度、切片容量
  • 调用updateSlice(slice)时同样做了值拷贝,但拷贝的是切片本身的结构,副本和原始切片持有的底层数组指针指向同一块内存空间
  • 函数内slice[0] = "x"的操作实际修改的是共同的底层数组的值,因此原始切片读取时也会拿到修改后的值,最终输出[x b c]。

内容的提问来源于stack exchange,提问作者mr_yoda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:48:02