func f1() (r int) {
defer func () {
r++
}()
return 10
}
fmt.print(f1())
输出居然不是 10 ??????????
1
BingoXuan 2020-10-12 17:55:33 +08:00
应该是编译器优化吧,定义返回值 r,r 的值为 10,defer 执行函数使 r 自增,返回 r,结果是 11 。
|
2
gollwang 2020-10-12 17:57:32 +08:00
你 return 10 不就相当于:
r=10 return r ? |
3
nomansky 2020-10-12 17:58:40 +08:00
golang 基础题了
|
4
Dganzh 2020-10-12 18:00:10 +08:00
这里 return 过程是
赋值 r=10 ; 执行 defer,r=11 ; 返回 r=11 ; |
5
qq316107934 2020-10-12 18:02:20 +08:00 2
基础题了,区别于:
func f1() (int) { r:=10 defer func () { r++ }() return r } |
6
reus 2020-10-14 13:47:32 +08:00
是你自己没学好,官方博客都有一模一样的例子: https://blog.golang.org/defer-panic-and-recover
|