示例
package main
import "fmt"
func main() {
defer fmt.Printf("show defer 1\n")
defer fmt.Printf("show defer 2\n")
fmt.Printf("normal show\n")
}
运行结果
normal show
show defer 2
show defer 1
作用
延迟 defer之后的fmt.Printf(“show defer\n”)函数在main()函数中的运行,也即决定了函数运行的 时机 。
什么时候执行
defer所在函数中return语句执行之后
使用注意:
- defer必须定义在所在函数中return语句或os.Exit()/panic()函数之前,不然会导致defer之后的函数不会执行
- 定义多个defer表达式后,按照先进后出的方式执行,即先定义的后执行,如示例中两个defer表达式
- defer声明时如果延迟调用的函数中有变量x则按照声明时x的值来真正执行defer语句
使用场景
- 释放已打开文件资源
- 关闭socket网络连接
- 关闭数据库连接
- 释放锁资源
其他defer的使用见: