Go Defer

作者: 五岁小孩 | 来源:发表于2021-02-27 14:41 被阅读0次

    Go Defer

    • 如果函数里面有多条defer指令,他们的执行顺序是反序,即后定义的defer先执行。

    • defer函数的参数在defer语句出现的位置计算,不是在defer函数运行的时刻计算。

      package main
      
      import "log"
      
      func foo(n int) int {
          log.Println("n1=", n)
          defer log.Println("n=", n)
          n += 100
          log.Println("n2=", n)
          return n
      }
      
      func main() {
          var i int = 100
          foo(i)
      }
      
      其运行结果是:
      2017/09/30 19:25:10 n1=100
      2017/09/30 19:25:10 n2= 200
      2017/09/30 19:25:10 n= 100
      
      • 修改

        package main
        
        import "log"
        import _ "time"
        
        func foo(n int) int {
            log.Println("n1=", n)
            defer func() {
                n += 100
                log.Println("n=", n)
            }()
            n += 100
            log.Println("n2=", n)
            return n
        }
        
        func main() {
            var i int = 100
            foo(i)
        }
        
        其运行结果是:
        2017/09/30 19:30:58 n1= 100
        2017/09/30 19:30:58 n2= 200
        2017/09/30 19:30:58 n= 300
        

    相关文章

      网友评论

        本文标题:Go Defer

        本文链接:https://www.haomeiwen.com/subject/zpmonktx.html