这个题有迷惑性

2020-10-12 17:46:24 +08:00
 simenet

func f1() (r int) {

defer func () {
    r++
}()
return 10

}

fmt.print(f1())

输出居然不是 10 ??????????

1882 次点击
所在节点    Go 编程语言
6 条回复
BingoXuan
2020-10-12 17:55:33 +08:00
应该是编译器优化吧,定义返回值 r,r 的值为 10,defer 执行函数使 r 自增,返回 r,结果是 11 。
gollwang
2020-10-12 17:57:32 +08:00
你 return 10 不就相当于:
r=10
return r
nomansky
2020-10-12 17:58:40 +08:00
golang 基础题了
Dganzh
2020-10-12 18:00:10 +08:00
这里 return 过程是
赋值 r=10 ;
执行 defer,r=11 ;
返回 r=11 ;
qq316107934
2020-10-12 18:02:20 +08:00
基础题了,区别于:

func f1() (int) {
r:=10
defer func () {
r++
}()
return r
}
reus
2020-10-14 13:47:32 +08:00
是你自己没学好,官方博客都有一模一样的例子: https://blog.golang.org/defer-panic-and-recover

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/714252

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX