在 Go 语言中,用于异常处理的关键字主要有 panic
和 recover
。
panic
关键字用于主动触发一个运行时恐慌,这会导致程序停止正常执行,并开始展开调用栈,执行所有已注册的延迟函数。
package main
import "fmt"
func divide(a, b int) {
if b == 0 {
panic("除数不能为 0")
}
result := a / b
fmt.Println(result)
}
func main() {
divide(10, 0)
}
在上述示例中,如果除数为 0 ,就会触发 panic
。
recover
关键字用于在 defer
函数中捕获和恢复 panic
。
package main
import "fmt"
func protect(g func()) {
defer func() {
if r := recover(); r!= nil {
fmt.Println("Recovered:", r)
}
}()
g()
}
func risky() {
panic("Something went wrong!")
}
func main() {
protect(risky)
}
在这个例子中,recover
在 defer
函数中捕获了 panic
,并打印出了恢复的信息。
关于 Go 语言异常处理的更多内容,您可以参考以下链接:
常见问题解答:
Q: panic
和 recover
能在多个 goroutine 中使用吗?
A: 每个 goroutine 都有独立的调用栈,panic
不会影响其他 goroutine,recover
也只能恢复当前 goroutine 中的 panic
。
Q: panic
一定导致程序终止吗?
A: 如果在 panic
发生的函数中有 recover
捕获处理,程序不一定终止。
Q: 何时应该使用 panic
?
A: 通常用于不可恢复的错误情况,例如无法获取必要的资源或遇到无法处理的运行时条件。