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

248 阅读1分钟

defer 延时

1 是延迟到return 之前.
2 如果不写return最后默认都有一个return
/*
defer重要的作用
用于比如第一件事是开灯,最后一件事肯定是关灯。
有时代码写了开灯,最后的代码忘记写上关灯.
利用defer可以实现 开灯和关灯写在一起,但是执行顺序是按照最前和最后执行的。
*/

package main

import "fmt"

func main() {
	fmt.Println("开门")
	defer fmt.Println("关门")  //开门的时候立刻挂起一个关门的程序.  倒数第一执行
	fmt.Println("开灯")
	defer fmt.Println("关灯") //开灯的时候立刻挂起一个关门的程序.   倒数第二执行
	fmt.Println("上课")

}

/*
开门
开灯
上课
关灯
关门
*/




//结尾有个隐含的return

package main

import "fmt"

func main() {
	defer fmt.Println("疑是银河落九天")
	fmt.Println("日照香炉生紫烟")
	fmt.Println("要看瀑布挂前川")
	fmt.Println("飞流直下三千尺")

}
/*
日照香炉生紫烟
要看瀑布挂前川
飞流直下三千尺
疑是银河落九天
*/

// defer 多项内容

package main

import "fmt"

func last() {
	fmt.Println("飞流直下三千尺")
	fmt.Println("疑是银河落九天")

}
func main() {
	defer last()
	fmt.Println("日照香炉生紫烟")
	fmt.Println("要看瀑布挂前川")

}



//也可以通过匿名函数来实现 defer 多项内容

package main

import "fmt"

func main() {
        
            //defer func(){}() 是匿名函数
	defer func() {                     
		fmt.Println("飞流直下三千尺")
		fmt.Println("疑是银河落九天")
	}()

	fmt.Println("日照香炉生紫烟")
	fmt.Println("要看瀑布挂前川")

}