• 关于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后执行的

  • 相关阅读:
    【转】c#文件操作大全(一)
    Visual Assist安装、破解方法
    web socket多线程实时监听
    SFTP上传下载
    数据库分页代码
    JAVA H5微信分享
    Eclipse中activiti插件的安装
    HTTP请求报文和HTTP响应报文
    CodeVS 1013&1029
    Codeforces 805D/804B
  • 原文地址:https://www.cnblogs.com/guhao123/p/4960576.html
Copyright © 2020-2023  润新知