Go语言函数
文章目录
Go函数特点
- 无需声明原型
- 支持不定 变参
- 支持多返回值
- 支持匿名函数和闭包
- 函数也是一种类型,一个函数可以赋值给变量
- 不支持嵌套,一个包不能有两个名字一样的函数
- 不支持 重载
- 不支持 默认参数
一、函数的基本格式定义
go
package main
import "fmt"
func main() {
// 调用函数
a(3, "现在是大于1")
}
// 定义一个名为 a 的函数
// 传递两个变量 (类型: int string)
func a(data1 int, data2 string) {
if data1 > 1 {
fmt.Println(data1)
} else {
fmt.Println(data2)
}
}
go
package main
import "fmt"
func main() {
// r1和r2将会对应接收返回参数ret1和ret2
r1, r2 := a(0, "现在是小于1")
fmt.Println(r1, r2)
}
func a(data1 int, data2 string) (ret1 int, ret2 string) {
ret1 = data1
ret2 = data2
// 直接写一个return相当中: return ret1, ret2
return
}
二、匿名函数
bash
func main() {
b := func(data1 string) {
fmt.Printf(data1)
}
b("我是匿名函数")
}
三、自执行函数
- 自执行函数只会执行一次
go
func main() {
(func() {
fmt.Println("执行一次函数")
})()
}
四、闭包函数
- 一个函数返回一个函数就叫闭包函数
go
func main() {
mo()(4)
}
func mo() func(int) {
return func(num int) {
fmt.Println("闭包函数", num)
}
}
五、延迟调用
go
func main() {
defer mo() // 虽然放在了第一个, 但是前面加上defer就会变为最后一个执行
fmt.Println("这是第一个执行")
fmt.Println("这是第二个执行")
}
func mo() {
fmt.Println("我想第一个执行")
}