6. 延迟执行

defer 语句会将其后面跟随的语句进行延迟处理,在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行, 也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。

package main 

import "fmt"


func main(){
	fmt.Println("defer begin")
    // 将defer放入延迟调用栈
    defer fmt.Println(1)
    defer fmt.Println(2)
    // 最后一个放入, 位于栈顶, 最先调用
    defer fmt.Println(3)
    fmt.Println("defer end")
}

defer 语句正好是在函数退出时执行的语句,所以使用 defer 能非常方便地处理资源释放问题。