golang 中的 defer

个00个 · · 601 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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)
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:个00个

查看原文:golang 中的 defer

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

601 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传