返回
Go Quiz:从Go面试题看recover注意事项(第一篇)
后端
2023-12-11 21:11:52
Go Quiz:从Go面试题看recover注意事项(第一篇)
在Go语言中,recover函数是一个非常重要的错误处理工具,它可以捕获到panic并恢复程序的执行。在Go面试中,recover函数也是经常被问到的一个知识点。
本篇Go Quiz系列文章将重点考察recover函数在什么情况下可以捕获到panic。通过对面试题的分析,帮助读者深入理解recover函数的使用场景和注意事项。
面试题:
以下代码中,recover函数能否捕获到panic?
func main() {
defer func() {
if err := recover(); err != nil {
fmt.Println(err)
}
}()
panic("something wrong")
}
答案:
可以。
解析:
在Go语言中,recover函数只能捕获到在它所在的goroutine中发生的panic。在本例中,panic是在main函数中发生的,而recover函数也在main函数中,因此recover函数可以捕获到panic。
需要注意的是,如果panic发生在其他goroutine中,那么recover函数是无法捕获到panic的。例如,以下代码中的recover函数就无法捕获到panic:
func main() {
go func() {
panic("something wrong")
}()
defer func() {
if err := recover(); err != nil {
fmt.Println(err)
}
}()
}
recover函数的使用注意事项:
- recover函数只能捕获到在它所在的goroutine中发生的panic。
- recover函数只能捕获到一次panic。如果在一个goroutine中发生多次panic,那么recover函数只会捕获到第一次panic。
- recover函数只能捕获到panic值,而无法捕获到panic的原因。
- recover函数不能用于捕获系统错误。系统错误是指由Go语言运行时发生的错误,例如内存分配错误、堆栈溢出等。
总结:
recover函数是一个非常重要的错误处理工具,它可以捕获到panic并恢复程序的执行。但是在使用recover函数时,需要注意上述注意事项,以避免出现问题。