zoukankan      html  css  js  c++  java
  • 关于golang的defer的练习

    golang的defer怎么说。大意就是在函数return后。函数关闭前。按照filo的顺序来执行的关键字

    上代码:

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        // a()
        fmt.Println(c())
        // b()
        // fmt.Println(d())
    }
    func c() (i int) {
        defer func() { i++ }()
        defer fmt.Println("this:", i)
        return 1
    }
    func a() {
        i := 0
        defer fmt.Println(i)
        i = i + 1
    }
    
    func b() {
        var whatever [5]struct{}
        for i := range whatever {
            // defer func() { fmt.Println(i) }()
            defer func(n int) { fmt.Println(n) }(i)
        }
    }
    
    func d() (i int) {
        defer fmt.Println("sdad")
        return 1
    }

    函数c() 的返回:

    this: 0
    2

    函数a()的返回:

     0

    函数b()的返回:

    4
    3
    2
    1
    0

    函数d()的返回:

    sdad
    1

    然后为了弄清楚到底是return前还是return后执行的。

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        test()
    }
    
    func test() (int, error) {
        defer fmt.Println("defer")
        return fmt.Println("return")
    }

     输出的是:

    return
    defer

    豁然开朗。。就是return后执行的

  • 相关阅读:
    第五天站立会议记录
    第四天站立会议
    第三天站立会议
    第二天站立会议
    冲刺会议第三天
    冲刺会议第二天
    团队建议总结
    第二次冲刺第一天
    项目总结(09)
    第七天站立会议
  • 原文地址:https://www.cnblogs.com/guhao123/p/4960576.html
Copyright © 2011-2022 走看看