defer 延时
1 是延迟到return 之前.
2 如果不写return最后默认都有一个return
1 /*
2 defer重要的作用
3 用于比如第一件事是开灯,最后一件事肯定是关灯。
4 有时代码写了开灯,最后的代码忘记写上关灯.
5 利用defer可以实现 开灯和关灯写在一起,但是执行顺序是按照最前和最后执行的。
6 */
7
8 package main
9
10 import "fmt"
11
12 func main() {
13 fmt.Println("开门")
14 defer fmt.Println("关门") //开门的时候立刻挂起一个关门的程序. 倒数第一执行
15 fmt.Println("开灯")
16 defer fmt.Println("关灯") //开灯的时候立刻挂起一个关门的程序. 倒数第二执行
17 fmt.Println("上课")
18
19 }
20
21 /*
22 开门
23 开灯
24 上课
25 关灯
26 关门
27 */
1 //结尾有个隐含的return
2
3 package main
4
5 import "fmt"
6
7 func main() {
8 defer fmt.Println("疑是银河落九天")
9 fmt.Println("日照香炉生紫烟")
10 fmt.Println("要看瀑布挂前川")
11 fmt.Println("飞流直下三千尺")
12
13 }
14 /*
15 日照香炉生紫烟
16 要看瀑布挂前川
17 飞流直下三千尺
18 疑是银河落九天
19 */
1 // defer 多项内容
2
3 package main
4
5 import "fmt"
6
7 func last() {
8 fmt.Println("飞流直下三千尺")
9 fmt.Println("疑是银河落九天")
10
11 }
12 func main() {
13 defer last()
14 fmt.Println("日照香炉生紫烟")
15 fmt.Println("要看瀑布挂前川")
16
17 }
18
19
20
21 //也可以通过匿名函数来实现 defer 多项内容
22
23 package main
24
25 import "fmt"
26
27 func main() {
28
29 //defer func(){}() 是匿名函数
30 defer func() {
31 fmt.Println("飞流直下三千尺")
32 fmt.Println("疑是银河落九天")
33 }()
34
35 fmt.Println("日照香炉生紫烟")
36 fmt.Println("要看瀑布挂前川")
37
38 }