Go面试题64
1: 下面列举的是recover()
的几种调用方式, 哪些是正确的?
- A:
func main() {
recover()
panic(1)
}
- B:
func main() {
defer recover()
panic(1)
}
- C:
func main() {
defer func() {
recover()
}()
panic(1)
}
- D
func main() {
defer func() {
defer func() {
recover()
}()
}()
panic(1)
}
2: 下面代码输出什么, 请说明?
func main() {
defer func () {
fmt.Print(recover())
}()
defer func() {
defer fmt.Print(recover())
panic(1)
}()
defer recover()
panic(2)
}
参考答案及解析
1: 答案及解析: C
. recover()
必须在defer()
函数中直接调用才有效. 上面其他的几种情况调用都是无效的: 直接调用recover()
, 在defer()
中直接调用recover()
和defer()
调用时多层嵌套.
2: 答案及解析: 21
. recover()
必须在defer()
函数中调用才有效, 所以第9行代码捕获是无效的.在调用defer()
时,便会计算函数的参数并压入栈中, 所以执行第六行代码时,此时便会捕获panic(2)
; 此后的panic(1)
会被上一层的recover()
捕获. 所以输出21
.
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付