Golang中panic与recover的区别



在Go语言中,panicrecover是两个用于处理运行时异常的内置函数。

panic函数类似于其他编程语言中的throwraise,用于抛出异常。当执行到panic后,会终止执行剩余代码,并打印错误堆栈信息。需要注意的是,panic并不会像os.Exit(0)一样立即停止程序的运行,如果有defer语句,它仍然会被执行。

recover函数用于处理panic。它返回两个值,第一个值是panic的信息,第二个值是恢复后的状态。recover只能恢复当前函数级别或者当前函数调用中的panic,恢复后调用当前级别函数结束,但是调用此函数的函数可以继续执行。

此外,panic会一直向上传递,如果没有遇到recover()则表示程序终止。如果遇到了recover(),那么recover()所在级别函数在外界看来是没有出现panic的,这时候panic就不会继续向上传递,类似于JavaScript的事件冒泡。

总的来说,panic用于主动抛出异常,而recover用于捕获并处理异常。