栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Go Quiz: 从Go面试题看panic注意事项第1篇

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Go Quiz: 从Go面试题看panic注意事项第1篇

面试题

这是Go Quiz系列里关于panic的第1篇,主要考察同一个goroutine在多次panic场景下recover的机制。

// quiz0.go
package main
​
import "fmt"
​
func main() {
  defer func() { fmt.Println(recover()) }()
  defer func() { fmt.Println(recover()) }()
  defer panic(1)
  panic(2)
}

A: 2

B: 1

C: 2 1

D: 1 2

E: 直接panic

解析

被defer的函数调用会被延后到函数return或者panic退出之前执行,因此本题的执行结果如下:

Step 1: 执行panic(2),触发被defer的函数的执行

Step 2: 执行代码里第9行被defer的函数调用panic(1),panic(1)会覆盖panic(2),可以当做panic(2)没有了

Step 3: 执行代码里第8行被defer的函数调用,recover()捕获panic(1),打印1

Step 4: 执行代码里第7行被defer的函数调用,recover()返回的是nil,因为panic已经被第8行的recover()捕获,所以打印nil

所以本题的答案是B

思考题

留一道思考题,想知道答案的可以给本人vx公众号发送消息panic获取答案和题目解析。

// quiz1.go
package main
​
import "fmt"
​
func main() {
  defer func() { fmt.Println(recover()) }()
  defer panic(1)
  panic(2)
}

A: 1

B: 2

C: 先打印1,然后panic

D: 先打印2,然后panic

加餐

Go Quiz: Google工程师的Go语言面试题

Go Quiz: 从Go面试题看slice的底层原理和注意事项

Go Quiz: 从Go面试题搞懂slice range遍历的坑

Go Quiz: 从Go面试题看channel的注意事项

Go Quiz: 从Go面试题看channel在select场景下的注意事项

Go Quiz: 从Go面试题看defer语义的底层原理和注意事项

Go Quiz: 从Go面试题看defer的注意事项第2篇

Go Quiz: 从Go面试题看defer的注意事项第3篇

Go Quiz: 从Go面试题看分号规则和switch的注意事项

官方教程:Go泛型入门

一文读懂Go泛型设计和使用场景

开源地址

文章和示例代码开源在GitHub: Go语言初级、中级和高级教程。

公众号:coding进阶。关注公众号可以获取最新Go面试题和技术栈。

个人网站:Jincheng's Blog。

知乎:无忌。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732708.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号