1、函数一经调用立即执行
fmt.Println("hello")
fmt.Println("哈哈")
输出结果======>>
hello
哈哈
2、关键字 defer⽤于延迟一个函数的执行,defer语句只能出现在函数的内部
为了保证文件的关闭能够正确执行,可以使用defer,先打开文件,执行读写操作,最后关闭文件
基本用法:
defer fmt.Println("hello")
fmt.Println("哈哈")
输出结果======>>
哈哈
hello
(1)如果一个函数中有多个defer语句,它们会以后进先出的顺序执行
defer fmt.Println("hello")
defer fmt.Println("哈哈")
defer fmt.Println("嘻嘻")
输出结果======>>
嘻嘻
哈哈
hello
(2)即使函数或某个延迟调用发生错误,其他调用依旧会执⾏
func test(x int) {
v := 100 / x
fmt.Println(v)
}
defer fmt.Println("hello")
defer fmt.Println("哈哈")
defer test(0)
defer fmt.Println("嘻嘻")
输出结果======>>
嘻嘻
哈哈
hello
panic: runtime error: integer divide by zero
(3)由于匿名函数前面加上了defer所以匿名函数没有立即执行,虽然没有立即调用执行匿名函数,但是已经完成了参数的传递
a := 10
b := 20
defer func(a,b int) { //添加参数
fmt.Println("匿名函数a", a)
fmt.Println("匿名函数b", b)
}(a,b) //传参
a = 100
b = 200
fmt.Println("main函数a", a)
fmt.Println("main函数b", b)
输出结果======>>
main函数a 100
main函数b 200
匿名函数a 10
匿名函数b 20