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