defer是在return之后执行的
return xxx这一条语句并不是一条原子指令! 只是把返回值赋值给返回变量,函数并没有带着返回值返回结果
func f() (result int) { //相当于在函数体内定义一个变量result
defer func() { //在return后执行,修改返回变量result(result==1)
result++
}()
return 0 //将返回值0赋值给返回变量result(result = 0),函数本身并没有带着返回值返回
}
下面说明下函数执行流程:
1.首先定义一个返回变量result
2.调用return,将返回值0赋值给返回变量result(0)
3.执行defer,修改返回变量result(1)
4.最后函数带着返回变量result(1)返回到函数调用处
package main
import "fmt"
func main() {
fmt.Println(f()) //1
}