首页 关于我们 成功案例 网络营销 电商设计 新闻中心 联系方式
QQ联系
电话联系
手机联系

Golang如何传递参数_Golang值传递与引用传递对比说明

发布时间:2025-12-06 21:17
发布者:网络
浏览次数:
Go语言中所有参数传递都是值传递,但slice、map、channel等类型因内部含指针而“表现得像引用传递”;若需修改原变量本身,则必须显式传指针。

golang如何传递参数_golang值传递与引用传递对比说明

Go语言中没有传统意义上的“引用传递”,所有参数传递都是值传递,但是否“表现得像引用传递”,取决于你传的是什么类型——关键在底层数据结构是否包含指针

值传递的本质:复制一份副本

函数调用时,Go会把实参的值完整拷贝一份给形参。后续对形参的修改,不影响原始变量。

  • 基本类型(int、string、bool、struct等):拷贝整个值,安全独立
  • 切片(slice)、map、channel、func、interface:虽然也是值传递,但它们本身是包含指针的描述符,所以修改其指向的数据会影响原内容

哪些类型“看起来像引用传递”?

不是语言支持引用传递,而是这些类型内部封装了指针:

  • slice:拷贝的是底层数组指针、长度、容量 —— 修改元素会反映到原slice
  • map:拷贝的是指向哈希表的指针 —— 增删改key都会影响原map
  • channel:拷贝的是指向底层管道结构的指针 —— 发送/接收操作作用于同一通道

例如:func modifySlice(s []int) { s[0] = 999 } —— 调用后原slice首元素确实变了,但s = append(s, 1)不会影响外部,因为append可能造成底层数组扩容,s会指向新地址。

想真正修改原始变量?传指针

当需要修改变量本身的值(比如改变一个int的数值、替换一个struct字段、或让函数分配新内存并返回地址),必须显式传指针:

简小派 简小派

简小派是一款AI原生求职工具,通过简历优化、岗位匹配、项目生成、模拟面试与智能投递,全链路提升求职成功率,帮助普通人更快拿到更好的 offer。

简小派 123 查看详情 简小派
  • 定义函数参数为 *T 类型
  • 调用时用 &var 取地址
  • 函数内通过 *p = ... 修改原始值

例如:func increment(x *int) { *x++ };调用 increment(&a) 后,a 的值才会增加。

小结:别记“值 or 引用”,记住“传什么,就拷什么”

Go始终值传递。区别只在于:你传的是纯数据(如 int),还是带指针的“句柄”(如 slice)。理解底层结构(比如 slice 是 struct{ptr *T, len, cap}),比背概念更可靠。

基本上就这些。

以上就是Golang如何传递参数_Golang值传递与引用传递对比说明的详细内容,更多请关注其它相关文章!


# go  # golang  # go语言  # app  # 区别  # 的是  # 数据结构  # 都是  # 布尔  # 检测方法  # 句柄  # 才会  # 相关文章  # 中文网  # 解决问题  # oppo关键词排名  # 常州专业网站优化怎么收费  # seo推广推荐火星软件  # 34小说网站建设游戏  # seo建站什么用  # 阳曲关键词排名有哪些  # 什么是竞价推广营销方案  # 酒店网站建设与推广  # 津南区个人网站优化单价  # 吉林网站海外推广怎么做