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