go 语言 defer 关键字

defer 关键字

go语言中的defer语句会将其后面跟随的语句进行延迟处理。在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()
}