下面这段代码输出什么?
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() { fmt.Println(f(3)) }
答案:7
解析:
// 先执行这一段代码, 然后 r 被赋值为 4
return n+1
// 然后执行,但是会触发panic
defer f()
// 最后执行,r 再加3 r=7,然后recover(),最后函数返回 7
defer func() {
r += n
recover()
}()