前言
在GO语言中,使用defer关键字延迟一个函数或者方法的执行。defer语句会在所有函数最后去执行。
列如,open打开一个文件,可能最后会忘记close。可以在一开始使用defer close,延迟执行close。
多个defer的执行顺序
当函数中出现多个defer语句,则在函数的最后逆序执行defer语句。(遵循栈的操作,先进后出)
func main() {
defer fmt.Println("defer测试完毕")
defer fmt.Println("world")
defer fmt.Print("hello ")
fmt.Println("测试defer")
}
defer语句的参数传递
如果defer语句遇到了参数传递。实际上,defer语句调用时参数就已经传递了,只是相关函数和语句会被放到函数的最后执行。后续语句对于参数的修改和先前的defer语句就没有关系了。
func main() {
num := 10
fmt.Println("定义num:", num)
defer fmt.Println("defer参数传递 num:", num)
num *= 2
fmt.Println("计算后的num:", num)
}