延迟调用defer
1、特性:
- 关键字defer用于注册延迟调用
- 这些调用直到return前才被执行。因此,可以用来做资源清理
- 多个defer语句,按先进后出的方式执行
- defer语句中的变量,在defer声明时就决定了
2、用途
- 关闭文件句柄
- 锁资源释放
- 数据库连接释放
3、注意
- defer在执行语句时,函数调用的参数会被保存起来,但是不执行,也就是复制了一份。多个defer注册,按FILO(先进后出)次序执行
- 多个defer注册,如果函数或某个延迟调用发生错误,这些调用依旧会被执行
- 延迟调用参数在注册时求值或复制,可用指针或闭包“延迟”读取
- 滥用defer可能导致性能问题,尤其是在一个“大循环”里