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 ![]() 基础题了,区别于: 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 |