函数
函数的定义
package main
import "fmt"
/*
func 函数名(参数1 类型1,参数2 类型2) 返回值类型 {
函数体
}
*/
func add(a, b int) int {
return a + b
}
func main() {
a := add(1, 2)
fmt.Println(a) //3
}
函数进阶
高阶函数
package main
import "fmt"
func add(a, b int) int {
return a + b
}
func sub(a, b int) int {
return a - b
}
func maths(a func(int, int) int, b, c int) int {
return a(b, c)
}
func call() func(int, int) int {
return func(a, b int) int {
return a + b
}
}
func main() {
a := maths(add, 1, 2)
b := maths(sub, 1, 2)
ret := call()
fmt.Println(a, b, ret(3, 4)) //3 -1 7
}
闭包
package main
import "fmt"
func add(a, b int) {
fmt.Println(a + b)
}
func closure(f func(a, b int), a, b int) func() {
return func() {
f(a, b)
}
}
func f(fn func()) {
fn()
}
func main() {
a := closure(add, 1, 2)
f(a)
}
defer延迟调用
package main
import "fmt"
func add(a, b int) {
fmt.Println(a + b)
}
func main() {
defer add(1, 2) //先打印7后打印3
add(3, 4)
}
内置函数panic和recover
package main
import "fmt"
func f_1() {
defer func() {
err := recover() //recover记录错误,跳出函数,程序不停止,继续运行
fmt.Println(err) //打印runtime error: integer divide by zero
}()
a := 1
b := 0
fmt.Println("f1") //打印f1
fmt.Println(a / b) //异常
fmt.Println("f2") //不会打印f2
}
func f_2() {
panic("抛出异常") // panic抛出异常,程序会终止
fmt.Println("f3") //不会被打印f3
}
func main() {
f_1()
f_2()
}