go defer

14 阅读1分钟

defer翻译过来是延迟,代表将推迟执行执行的代码。那推迟到什么时候呢,答案是推迟到函数执行完毕之前,注意:函数执行完毕不等于return!return在go中不是一条原子指令,也就是说return是由几个步骤执行完成的。

example

return xxx;

可以解剖成:

返回值 = xxx;
执行defer注册的代码
return// 空return,代表函数执行完毕。

func f() (result int) {
    defer func() {
        result++
    }()
    return 0
}

可以翻译成:

func f() (results int) {
    results = 0;
    func() {
        result++
    }()
    return;
}

所以执行上面的f函数,最终的返回值为:1,而不是0;

参考链接