golang -- defer相关
示例
package mainimport 'fmt'func main() { defer fmt.Printf('show defer 1\n') defer fmt.Printf('show defer 2\n') fmt.Printf('normal show\n')}
运行结果
normal showshow defer 2show 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的使用见:
https://go.dev/blog/defer-panic-and-recover
赞 (0)