美文网首页
golang 中的 defer

golang 中的 defer

作者: 个00个 | 来源:发表于2019-04-09 16:39 被阅读0次

    defer 是在return 之前执行的
    但是return xxx 并不是一条原始指令

    package main
    
    import (
        "fmt"
    )
    
    // my : 1
    // res : 1
    func f1() (result int) {
        defer func() {
            result++
        }()
        return 0
    }
    
    // my : 10
    // res : 5 -- 我误判的原因, t为局部变量了. defer 影响的是局部变量 t.
    //         -- r在return的时候已经拷贝赋值了.
    func f2() (r int) {
        t := 5
        defer func() {
            t = t + 5
        }()
        return t
    }
    
    // my : 1
    func f3() (r int) {
        defer func(r int) {
            r = r + 5
        }(r)
        return 1
    }
    
    func main(){
        // return xxx这一条语句并不是一条原子指令!
        // 先给返回值赋值,然后调用defer表达式,最后才是返回到调用函数中。
        a := f1()
        b := f2()
        c := f3()
        fmt.Println(a)
        fmt.Println(b)
        fmt.Println(c)
    }
    

    相关文章

      网友评论

          本文标题:golang 中的 defer

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