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;