Golang 运行时异常和 panic
warning:
这篇文章距离上次修改已过423天,其中的内容可能已经有所变动。
在 Go 语言中,运行时异常通常是通过 panic 机制来处理的。当程序执行过程中遇到了一个不可恢复的错误时,可以通过调用 panic 函数来停止当前的 goroutine,并开始进行异常的传播和清理流程。
panic 函数的定义如下:
func panic(interface{})当程序执行到 panic 时,当前的 goroutine 会立即停止执行后续的代码,开始逐层向上执行函数的堆栈,查找是否存在异常处理的代码,即 recover 函数。如果找到了 recover,panic 的异常就会被捕获,程序可以根据 recover 的返回值来进行相应的处理,防止整个程序崩溃。
recover 函数的定义如下:
func recover() interface{}recover 必须在 defer 关键字修饰的函数中直接使用,否则不会生效。defer 关键字会注册一个函数,在它所在的函数退出时执行。
下面是一个简单的使用 panic 和 recover 的例子:
package main
import "fmt"
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in main", r)
}
}()
f()
fmt.Println("Returned normally from f.")
}
func f() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in f", r)
}
}()
g()
}
func g() {
panic("Panic in g.")
}在这个例子中,panic 被调用于 g 函数内,recover 被调用于 f 和 main 函数中的 defer 函数内。由于 recover 能够捕获到 panic 抛出的异常,程序就不会因为 panic 而崩溃,而是按照正常的流程打印出相应的信息。
评论已关闭