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 }