Go语言基础之函数!
Go语言基础之函数!
月伴飞鱼函数的声明:
函数的声明:
- 使用 func 关键字,后面依次接
函数名
,参数列表
,返回值列表
,用 {} 包裹的代码逻辑体
- 形式参数列表描述了函数的参数名以及参数类型
- 这些参数作为局部变量,其值由参数调用者提供
- 返回值列表描述了函数返回值的变量名以及类型
- 如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的
1 | func 函数名(形式参数列表)(返回值列表){ |
函数名:由字母、数字、下划线组成。
- 但函数名的第一个字母不能是数字:函数名也不能重复命名。
参数:参数由参数变量和参数变量的类型组成,多个参数之间使用
,
分割返回值:返回值由返回值变量和其变量类型组成
- 也可以只写返回值的类型,多个返回值必须用
()
包裹,并用,
分割
举个例子,定义一个 sum 函数,接收两个 int 类型的参数
- 在运行中,将其值分别赋值给 a,b,并规定必须返回一个int类型的值
1 | func sum(a int, b int) (int){ |
无参数无返回值函数
函数可以有参数也可以没有参数,可以有返回值也可以没有返回值
1 | func main() { |
可变参数函数
Go语言支持可变参数函数
可变参数指调用参数时,参数的个数可以是任意个
可变参数必须在参数列表最后的位置
- 在参数名和类型之间添加三个点表示可变参数函数
1 | func 函数(参数,参数,名称 ... 类型 ){ |
多返回值
函数如果有多个返回值时必须用
()
将所有返回值包裹起来。
匿名函数
匿名函数就是没有名称的函数
正常函数可以通过名称多次调用,而匿名函数由于没有函数名
- 所以大部分情况都是在当前位置声明并立即调用(函数变量除外)
匿名函数声明完需要调用,在函数结束大括号后面紧跟小括号
- 匿名函数都是声明在其他函数内部
1 | func (){ |
函数作为参数或返回值
变量可以作为函数的参数或返回值类型,而函数既然可以当做变量看待
- 函数变量也可以当做函数的参数或返回值
函数作为参数时,类型写成对应的类型即可
1 | func main() { |
Defer语句
Go语言中的
defer
语句会将其后面跟随的语句进行延迟处理。在
defer
归属的函数即将返回时,将延迟处理的语句按defer
定义的逆序进行执行
- 也就是说,先被
defer
的语句最后被执行,最后被defer
的语句,最先被执行。由于
defer
语句延迟调用的特性,所以defer
语句能非常方便的处理资源释放问题。
- 比如:资源清理、文件关闭、解锁及记录时间等。
1 | func main() { |
defer执行时机:
- 在Go语言的函数中
return
语句在底层并不是原子操作
- 它分为给返回值赋值和RET指令两步。
- 而
defer
语句执行的时机就在返回值赋值操作后,RET指令执行前。
全局变量
全局变量是定义在函数外部的变量,它在程序整个运行周期内都有效。
在函数中可以访问到全局变量。
1 | package main |