Go中函数参数默认值传递,但可通过指针实现修改原值:结构体指针避免拷贝并支持修改字段;数组指针需严格匹配长度;切片因含底层指针而天然支持元素修改,更常用且灵活。
在 Go 中,函数参数默认是值传递,但通过指针可以实现类似“引用传递”的效果,让函数能修改原始结构体或数组的内容。关键不是“引用传递”(Go 没有引用类型),而是传递指向原数据的地址,从而间接操作原值。
结构体较大时,传值会复制全部字段,开销高;传指针只复制 8 字节地址(64 位系统),且允许函数内修改原结构体字段。
示例:
type User struct {
Name string
Age int
}
func updateName(u *User, newName string) {
u.
Name = newName // 直接修改原始结构体
}
func main() {
u := User{Name: "Alice", Age: 30}
updateName(&u, "Bob")
fmt.Println(u.Name) // 输出 "Bob",原变量已被修改
}
注意:
- 函数签名中用 *User 表示接收结构体指针;
- 调用时用 &u 取地址;
- 方法接收者也常用指针(如 func (u *User) SetAge(a int)),否则无法修改原值。
Go 中数组是值类型,长度是其类型的一部分(如 [3]int 和 [5]int 是不同类型)。传数组指针可避免拷贝,也能修改原数组元素。
示例:
func doubleArray(arr *[4]int) {
for i := range arr {
arr[i] *= 2
}
}
func main() {
a := [4]int{1, 2, 3, 4}
doubleArray(&a)
fmt.Println(a) // [2 4 6 8]
}
说明:
- *[4]int 是指向长度为 4 的 int 数组的指针;
- 必须匹配长度,不能用 *[5]int 接收;
- 若需灵活长度,应使用切片([]int)——它本身包含指向底层数组的指针、长度和容量。
虽然切片不是指针类型,但它内部含指针,所以传切片参数时,函数可修改其底层数组元素(但不能改变原切片的长度或容量,除非返回新切片)。
示例:
func multiplyByTwo(s []int) {
for i := range s {
s[i] *= 2
}
// s = append(s, 99) // 这行不会影响调用方的 s 长度/容量
}
func main() {
data := []int{1, 2, 3}
multiplyByTwo(data)
fmt.Println(data) // [2 4 6] —— 元素被修改了
}
要点:
- 切片传参无需取地址(data 即可),因其本身已携带底层数据地址;
- 若需扩容并让调用方感知变化,函数应返回新切片:func grow(s []int) []int;
- 大多数场景下,优先用切片而非数组指针,更符合 Go 习惯。
不复杂但容易忽略:Go 没有隐式引用,一切显式——想改原值,就传指针;想安全只读,就传值或切片(注意切片仍可改底层数组)。
# go
# golang
# app
# 字节
# ai
# golang指针
# 结构体
# int
# 指针
# 接口
# 值类型
# 引用类型
# 指针类型
# Interface
# 值传递
# 引用传递
# 切片
# 原值
# 时用
# 若需
# 也能
# 已被
# 可以实现
# 不能用
# 而非
# 可通过
# 但它
相关文章:
建站之星后台密码如何安全设置与找回?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
广东企业建站网站优化与SEO营销核心策略指南
网站企业制作流程,用什么语言做企业网站比较好?
建站之星在线版空间:自助建站+智能模板一键生成方案
高防服务器如何保障网站安全无虞?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
公众号网站制作网页,微信公众号怎么制作?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
公司门户网站制作流程,华为官网怎么做?
子杰智能建站系统|零代码开发与AI生成SEO优化指南
教程网站设计制作软件,怎么创建自己的一个网站?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
利用JavaScript实现拖拽改变元素大小
如何用PHP快速搭建CMS系统?
测试制作网站有哪些,测试性取向的权威测试或者网站?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
婚礼视频制作网站,学习*后期制作的网站有哪些?
网站制作价目表怎么做,珍爱网婚介费用多少?
如何在阿里云虚拟服务器快速搭建网站?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
如何高效利用200m空间完成建站?
网页设计与网站制作内容,怎样注册网站?
家庭服务器如何搭建个人网站?
清除minerd进程的简单方法
如何制作算命网站,怎么注册算命网站?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
如何在IIS管理器中快速创建并配置网站?
Swift中循环语句中的转移语句 break 和 continue
建站之星展会模版如何一键下载生成?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
移民网站制作流程,怎么看加拿大移民官网?
北京网站制作网页,网站升级改版需要多久?
建站之星安装模板失败:服务器环境不兼容?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
建站之星如何开启自定义404页面避免用户流失?
,购物网站怎么盈利呢?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
如何快速上传自定义模板至建站之星?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
javascript中的try catch异常捕获机制用法分析
如何快速搭建响应式可视化网站?
韩国服务器如何优化跨境访问实现高效连接?
,如何利用word制作宣传手册?
C#如何使用XPathNavigator高效查询XML
*请认真填写需求信息,我们会在24小时内与您取得联系。