分享

golang -- defer相关

 菌心说 2021-09-24

示例

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多