Go runtime
Go panic
大多数编程语言都提供了异常处理机制,恰恰相反,Go延续了C语言的风格,并未提供异常处理机制。但在Go中,提供了panic异常,从某种意义上说,它也非常接近其他语言的异常处理。
Go语言在编译期间就能捕获大量异常,但是有些异常只能发生在运行期间,比如运行期间的除以0的异常,数组越界错误等。
除了程序本身的问题导致panic异常外,也可以直接在程序里调用panic函数引发panic异常。panic函数原型如下:
1 |
|
当我们直接调用panic函数时就会引发程序panic异常。如下面例子:
1 |
|
当程序panic异常发生时,程序会中断运行,并执行panic异常中的所有deferred函数。例如,引发除0错误时,此时外层调用f(0)的函数f(1)里会执行defer,当然,panic异常会向外传递,知道所有的deferred函数全部执行完。
Go defer
Go语言的 defer 语句会将其后面跟随的语句进行延迟处理,在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。延迟语句常常用来释放资源,如下所示。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!