go语言中的defer语句会将其后面跟随的语句进行延迟处理。在defer归属的函数即将返回时,将延迟处理的语句按defer定义的逆序进行执行,也就是说,先被defer的语句最后被执行,最后被defer的语句,最先被执行 ( 遵循先进后出的栈原则 )。
关键字 defer 用于注册延迟调用。
这些调用直到 return 前才被执。因此,可以用来做资源清理。
多个defer语句,按先进后出的方式执行。
defer 语句中的变量,在 defer 声明时就决定了。
因为函 defer 的特性,它通常被用于关闭数据库连接、关闭句柄等垃圾清理工作;
package main
func test() int {
var res int = 0
defer func() {
println("defer 最后执行")
println("res值为 : ", res)
}()
for i := 0; i < 1000000; i++ {
res = res + i
}
return res
}
func main() {
test()
}