Go Quizzes 101 (3)
题目
package main
func f(n int) (r int) {
defer func() {
r += n
recover()
}()
var f func()
defer f()
f = func() {
r += 2
}
return n + 1
}
func main() {
println(f(3))
}
分析
- 函数返回值是 4
- 延迟调用的函数值也是在此调用被推入延迟调用堆栈时被估值的,所以
defer f()
会panic
,并不会执行r += 2
r += n
会被执行,并且恐慌会被恢复
所以最终的结果是 4+3=7
Comments