函数定义
Go语言中支持函数、匿名函数和闭包,通过func关键字进行定义。
1 | func 函数名(参数)(返回值){ |
- 函数名:由
字母、数字、下划线
组成。但函数名的第一个字母不能是数字。在同一个包内,函数名也称不能重名 - 参数:参数由
参数变量
和参数变量的类型
组成,多个参数之间使用,
分隔。 - 返回值:返回值由返回值变量和其变量类型组成,也可以只写返回值的类型,多个返回值必须用
()
包裹,并用,
分隔。 - 函数体:实现指定功能的代码块。
·
返回值return
仅指定类型
- 仅指定返回值类型,函数体内必须声明和初始化才能使用
- return语句中必须带上返回值名称
指定类型和名称
- 类型和名称用()括起来
- 函数体内直接使用,不必初始化
- return语句中不必带上返回值,系统自动查找
可变参数
-
可变参数通过
...
来实现 -
可变参数必须在固定参数的后面
-
可变参数可以用来进行遍历
for range
1
2
3
4
5
6
7func intSum4(a int, b...int) int { //b是int类型的可变参数
ret := a
for _, arg := range b{
ret += arg
}
return ret
}1
2
3
4
5
6
7func sum(values ...int) int{
sum := 0
for i:= range values{
sum += values[i] // 将values中每个元素进行遍历,再相加
}
return sum
}
1 | package main |
多个返回值
- 允许多个返回值
- 如果不想使用某个返回值,就用下划线
_
代替;若用于返回错误
1 | package main |
defer语句
特点
- 将
defer
语句进行延迟处理 - 场景:处理资源释放问题,资源清理、文件关闭、解锁及记录时间
- 处理顺序是
倒序
,类似栈
结构,先进后出FILO
- 仅仅是
defer
语句的倒序输出,其他语句正常顺序
1 | package main |
执行时机
在Go
语言的函数中return
语句在底层并不是原子操作,它分为给返回值赋值和RET
指令两步。而defer
语句执行的时机就在返回值赋值操作后,RET
指令执行前