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 能非常方便地处理资源释放问题。