在Go语言中,panic
和recover
是两个用于处理运行时异常的内置函数。
panic
函数类似于其他编程语言中的throw
或raise
,用于抛出异常。当执行到panic
后,会终止执行剩余代码,并打印错误堆栈信息。需要注意的是,panic
并不会像os.Exit(0)
一样立即停止程序的运行,如果有defer
语句,它仍然会被执行。
recover
函数用于处理panic
。它返回两个值,第一个值是panic
的信息,第二个值是恢复后的状态。recover
只能恢复当前函数级别或者当前函数调用中的panic
,恢复后调用当前级别函数结束,但是调用此函数的函数可以继续执行。
此外,panic
会一直向上传递,如果没有遇到recover()
则表示程序终止。如果遇到了recover()
,那么recover()
所在级别函数在外界看来是没有出现panic
的,这时候panic
就不会继续向上传递,类似于JavaScript的事件冒泡。
总的来说,panic
用于主动抛出异常,而recover
用于捕获并处理异常。