第一个例子:
package main
import (
"fmt"
)
func main() {
fmt.Println(a())
}
func a() (res int) {
defer func() {
res ++
}()
return res
}
上面这个例子打印结果是1
,那是因为return在defer前执行,当执行到defer时,返回值res会自增一次,所有最后整个函数返回的就是1
第二个例子:
package main
import (
"fmt"
)
func main() {
i := 0
defer fmt.Println(i)
i++
return
}
第二个例子是为0
,那是因为在defer执行前,就已经将i
的值得到了,相当于是一个快照,所以,即使return的结果是1,但defer的值始终是之前的i := 0