Go 面试每天一篇(第 65 天)


Go 面试每天一篇(第 65 天)


1.下面列举的是 recover() 的几种调用方式,哪些是正确的?

A.
1func main() {
2    recover()
3    panic(1)
4}
B.
1func main() {
2    defer recover()
3    panic(1)
4}
C.
1func main() {
2    defer func() {
3        recover()
4    }()
5    panic(1)
6}
D.
1func main() {
2    defer func() {
3        defer func() {
4            recover()
5        }()
6    }()
7    panic(1)
8}
参考答案及解析:C。recover() 必须在 defer() 函数中直接调用才有效。上面其他几种情况调用都是无效的:直接调用 recover()、在 defer() 中直接调用 recover() 和 defer() 调用时多层嵌套。

2.下面代码输出什么,请说明?

 1func main() {
 2    defer func() {
 3        fmt.Print(recover())
 4    }()
 5    defer func() {
 6        defer fmt.Print(recover())
 7        panic(1)
 8    }()
 9    defer recover() 
10    panic(2)
11}
参考答案及解析:21recover() 必须在 defer() 函数中调用才有效,所以第 9 行代码捕获是无效的。在调用 defer() 时,便会计算函数的参数并压入栈中,所以执行第 6 行代码时,此时便会捕获 panic(2);此后的 panic(1),会被上一层的 recover() 捕获。所以输出 21。

引自《Go语言101》

解析若有不妥之处,欢迎在留言区交流、指正!

看下今天的题目:
1.flag 是 bool 型变量,下面 if 表达式符合编码规范的是?

A. if flag == 1
B. if flag
C. if flag == false
D. if !flag
2.下面的代码输出什么,请说明?

 1func main() {
 2    defer func() {
 3        fmt.Print(recover())
 4    }()
 5    defer func() {
 6        defer func() {
 7            fmt.Print(recover())
 8        }()
 9        panic(1)
10    }()
11    defer recover()
12    panic(2)
13}
这道题与昨天的第二题有点类似,不过答案都在昨天的两道题目里了。
posted @   大海一个人听  阅读(213)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示