运行时异常
panic
在通常情况下,函数向其调用方报告错误的方式都是返回一个error
类型的值。但是当遇到致命错误的时候,很可能会使程序无法继续运行。Go推荐通过调用panic
函数来报告致命错误,它会停止当前控制流程,并引发一个运行时恐慌。例如:
package main
import "errors"
func main() {
outerFunc()
}
func outerFunc() {
innerFunc()
}
func innerFunc() {
panic(errors.New("an intended fatal error"))
}
程序执行后的结果为:
D:\gotest>go run main.go
panic: an intended fatal error
goroutine 1 [running]:
main.innerFunc(...)
D:/gotest/main.go:14
main.outerFunc(...)
D:/gotest/main.go:10
main.main()
D:/gotest/main.go:6 +0x77
exit status 2
当调用innerFunc
函数中的panic
函数后,innerFunc
的执行会被停止。紧接着,流程控制权会交给调用方outerFunc
函数。然后,outerFunc
函数的执行也会停止。运行时恐慌就沿着调用栈反方向进行传播,直至到达当前goroutine
的调用栈的最顶层。一旦达到顶层