defer 延时执行 用于【灯】开灯和关灯写到一起

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 }

 

上一篇:Go语言 - 函数 | 作用域


下一篇:Go defer使用