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)
}
网友评论