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语句执行之后

使用注意:

  1. defer必须定义在所在函数中return语句或os.Exit()/panic()函数之前,不然会导致defer之后的函数不会执行
  2. 定义多个defer表达式后,按照先进后出的方式执行,即先定义的后执行,如示例中两个defer表达式
  3. defer声明时如果延迟调用的函数中有变量x则按照声明时x的值来真正执行defer语句

使用场景

  1. 释放已打开文件资源
  2. 关闭socket网络连接
  3. 关闭数据库连接
  4. 释放锁资源

其他defer的使用见:
https://go.dev/blog/defer-panic-and-recover

(0)

相关推荐