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

  • 相关阅读:
    查找整数
    寒假作业3
    寒假作业2
    寒假作业1
    秋季学期总结
    对自己影响最深的三位老师
    自我介绍
    jquery学习笔记
    素材网站
    转:vim模式下报错E37: No write since last change (add ! to override)
  • 原文地址:https://www.cnblogs.com/guhao123/p/4960576.html
Copyright © 2011-2022 走看看