zoukankan      html  css  js  c++  java
  • Golang-函数的defer

    函数的defer
      为什么需要defer
        在函数中,程序员经常需要创建资源(比如:数据库连接、文件句柄、锁等) ,为了在函数执行完毕后,及时的释放资源,Go 的设计者提供 defer (延时机制)。
      快速入门案例

        

        执行后,输出的结果:

        

       

      defer 的注意事项和细节
        1)当 go 执行到一个 defer 时,不会立即执行 defer 后的语句,而是将 defer 后的语句压入到一个栈中[我为了讲课方便,暂时称该栈为 defer 栈], 然后继续执行函数下一个语句。
        2)当函数执行完毕后,在从 defer 栈中,依次从栈顶取出语句执行(注:遵守栈 先入后出的机制),所以同学们看到前面案例输出的顺序。

        3)在 defer 将语句放入到栈时,也会将相关的值拷贝同时入栈。请看一段代码:

             

          上面代码输出的结果如下:

          

       defer 的最佳实践

        defer 最主要的价值是在,当函数执行完毕后,可以及时的释放函数创建的资源。看下模拟代码。。

         

         说明  

        1)在 golang 编程中的通常做法是,创建资源后,比如(打开了文件,获取了数据库的链接,或者是锁资源), 可以执行 defer file.Close() defer connect.Close()
        2)在 defer 后,可以继续使用创建资源.
        3)当函数完毕后,系统会依次从 defer 栈中,取出语句,关闭资源.
        4)这种机制,非常简洁,程序员不用再为在什么时机关闭资源而烦心。

  • 相关阅读:
    [转] 一文读懂 HTTP/2 特性
    设置VS2019 支持C++17标准
    switch case 字符串表达式支持
    在Fabric实现类似Uniswap的去中心化交易所
    数据上链的原则与方式
    2.4g无线私有协议透传方案特色梳理
    无线数字麦克风解决方案小结
    高保真的音频编解码器模块及方案解析
    基于wifi的音频采集及处理解决方案小结
    基于智能降噪的助听器解决方案解析
  • 原文地址:https://www.cnblogs.com/Essaycode/p/12642266.html
Copyright © 2011-2022 走看看