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
# 值传递
# 引用传递
# 切片
# 原值
# 时用
# 若需
# 也能
# 已被
# 可以实现
# 不能用
# 而非
# 可通过
# 但它
相关文章:
如何在IIS中新建站点并解决端口绑定冲突?
网站制作公司排行榜,抖音怎样做个人官方网站
宝塔建站助手安装配置与建站模板使用全流程解析
北京专业网站制作设计师招聘,北京白云观官方网站?
如何用美橙互联一键搭建多站合一网站?
临沂网站制作公司有哪些,临沂第四中学官网?
购物网站制作公司有哪些,哪个购物网站比较好?
音乐网站服务器如何优化API响应速度?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
如何在阿里云完成域名注册与建站?
如何做网站制作流程,*游戏网站怎么搭建?
如何通过主机屋免费建站教程十分钟搭建网站?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
如何撰写建站申请书?关键要点有哪些?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
如何高效配置香港服务器实现快速建站?
公司网站的制作公司,企业网站制作基本流程有哪些?
设计网站制作公司有哪些,制作网页教程?
清除minerd进程的简单方法
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
如何高效完成自助建站业务培训?
如何通过宝塔面板实现本地网站访问?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
如何快速搭建FTP站点实现文件共享?
如何通过二级域名建站提升品牌影响力?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
建站之星后台密码遗忘如何找回?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
相册网站制作软件,图片上的网址怎么复制?
已有域名和空间如何快速搭建网站?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
如何破解联通资金短缺导致的基站建设难题?
制作网站外包平台,自动化接单网站有哪些?
微信推文制作网站有哪些,怎么做微信推文,急?
如何选择靠谱的建站公司加盟品牌?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
如何通过云梦建站系统实现SEO快速优化?
如何快速搭建个人网站并优化SEO?
Swift中循环语句中的转移语句 break 和 continue
独立制作一个网站多少钱,建立网站需要花多少钱?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
jQuery 常见小例汇总
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
企业微网站怎么做,公司网站和公众号有什么区别?
建站主机选择指南:服务器配置与SEO优化实战技巧
如何通过商城免费建站系统源码自定义网站主题?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。