02-形参和实参
1.01-包引用和引用顺序2.02-运算符号、标识符、注释、关键字3.03-变量和作用域4.02-常量(const)5.03-数组(array)6.04-切片(slice)7.05-map8.06-指针(pointer)9.07-通道(channel)10.08-结构体(struct)11.01-if语句12.02-for循环13.04-select语句14.03-switch语句15.make()、new()16.copy(切片间复制)17.append(增加切片成员)18.delete(删除map的成员)19.panic&recover20.03-匿名函数和闭包21.01-函数简单使用
22.02-形参和实参
23.04-递归函数24.05-方法25.06-接口(interface)26.01-并发27.02-携程通讯28.03-携程同步29.01-连接和建表30.02-创建数据31.03-基本查询32.04-高级查询33.05-初始化34.06-更新数据35.07-删除数据36.08 事务37.根据操作系统程序自动选择不同常量38.golang字串的base64编码解码39.golang数据类型转换40.golang 时间/时间戳的获取和转换1. 概述
1.1 形参(形式参数)
在函数定义中出现的参数。
可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。
1.2 实参(实际参数)
函数被调用时给出的参数。
包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。
1.3 举例说明
下边代码中,
a
和b
为实参,x
和y
为形参
package main import "fmt" func main(){ a := 7 b := 8 result := getSum(a,b) fmt.Printf("%d 和 %d 的和是:%d",a,b,result) } func getSum(x int,y int)int{ sum := x + y return sum }
2. 直传递
2.1 概念
值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
2.2 示例
代码说明:
- 定义结构体
将领
,实例化一个武将关羽。- 定义
下邳之战函数
,投降将领
为该函数的形参。- main函数调用
下邳之战
函数,并将关羽
作为实参传入该函数
- 代码
package main import "fmt" type 将领 struct { 姓名 string 势力 string } func main() { 关羽 := 将领{ 姓名: "关羽", 势力: "蜀"} fmt.Printf("下邳之战前关羽势力:%q\n",关羽.势力) 下邳之战(关羽) fmt.Printf("最终关羽势力:%q\n",关羽.势力) } func 下邳之战(投降将领 将领){ fmt.Println("=============下邳之战===============") 投降将领.势力 = "魏" fmt.Printf("下邳之战后关羽势力:%q\n",投降将领.势力) fmt.Println("=============挂印封金===============") }
- 输出结果
结果说明:
- 实参传入函数之前,关羽示例为蜀
- 实参传入函数后,实参
关羽
被传给形参投降将领
- 函数中,
投降将领
的势力被函数修改为魏- 函数结束后,打印关羽势力,仍为蜀。
下邳之战前关羽势力:"蜀" =============下邳之战=============== 下邳之战后关羽势力:"魏" =============挂印封金=============== 最终关羽势力:"蜀"
- 结果分析
说明直接传递变量,函数不会改变实参的值。
3. 引用传递
3.1 概念
引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
3.2 示例
代码说明:
- 定义结构体
将领
,实例化一个武将关羽
。- 定义
下邳之战函数
,投降将领指针
为该函数的形参。- main函数调用
下邳之战
函数,并将关羽
的地址作为实参赋值给投降将领指针
- 代码
package main import "fmt" type 将领 struct { 姓名 string 势力 string } func main() { 关羽 := 将领{ 姓名: "关羽指针", 势力: "蜀"} fmt.Printf("下邳之战前关羽势力:%q\n",关羽.势力) 下邳之战(&关羽) fmt.Printf("最终关羽势力:%q\n",关羽.势力) } func 下邳之战(投降将领指针 *将领){ fmt.Println("=============下邳之战===============") 投降将领指针.势力 = "魏" fmt.Printf("下邳之战后关羽势力:%q\n",投降将领指针.势力) fmt.Println("=============挂印封金===============") }
- 输出
下邳之战前关羽势力:"蜀" =============下邳之战=============== 下邳之战后关羽势力:"魏" =============挂印封金=============== 最终关羽势力:"魏"
结果说明:
- 实参传入函数之前,关羽势力为蜀
- 实参传入函数后,实参
关羽
的地址被传给形参投降将领指针
- 函数中,
投降将领指针
的势力被函数修改为魏- 函数结束后,打印关羽势力为魏。
- 结果分析
因为传入函数是关羽
的地址,投降将领指针
的类型是指针,指向了实参关羽的存储地址,当函数中投降将领指针
指向地址的值被改变,意味着实参关羽
的值被改变了
分类:
go语言开发 / go基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具