/*
1. 关键字 defer 用于注册延迟调用。
2. 这些调用直到 return 前才被执。因此,可以用来做资源清理。
3. 多个defer语句,按先进后出的方式执行。
4. defer语句中的变量,在defer声明时就决定了。
用途:
1. 关闭文件句柄
2. 锁资源释放
3. 数据库连接释放
*/
package main
import "fmt"
func main() {
var whatever [5]struct{}
for i := range whatever {
defer func() { fmt.Println(i) }()
}
}
/*输出
4
4
4
4
4
由于闭包用到的变量 i 在执行的时候已经变成4,所以输出全都是4.
*/
golang延迟调用defer
最新推荐文章于 2024-04-25 11:48:27 发布