当前位置: 首页 > 网络应用技术

一篇文章了解Golang的恐慌和恢复;

时间:2023-03-07 12:59:00 网络应用技术

  与defer类似,在Goroutine中还有一个_ Panic链接的链接链条与_ Panic链。当发生恐慌时,它也会插入链接列表中。

  恐慌发生在执行期间。然后将来不会执行恐慌代码,而是执行恐慌的逻辑,然后执行延期。该设备以true执行启动,与此同时,其延期结构中的_panic指针针对当前的_panic,表明这表明了这一点,表明这表示此。延期链接列表。如果在延期执行期间也触发了恐慌,则不执行恐慌后的代码,并将此恐慌插入恐慌链中,这是当前的恐慌。当您遇到的延迟时,与当前的恐慌不符时,在延期上找到恐慌,并将其标记为终止,从延期链接列表中删除当前执行的延期。打印恐慌删除信息并逐渐从链接列表的末尾输出

  恢复仅执行一件事

  执行每个延期之后

  使用_defer.sp和_defer.pc跳出当前的恐慌处理过程

  通过堆栈的指针确定,仅执行当前函数注册的延期函数

  恢复功能正常发生后,它将输入检测是否恢复恐慌的过程

  当恢复的功能再次发生时,Goroutine会将恐慌添加到链条中,将其设置为当前恐慌,然后执行延期链接列表。发现它没有由当前的恐慌执行。在恐慌链上找到恐慌和输出异常信息

  对于已标记为恢复的恐慌,请在输出异常信息时添加恢复的标签

  Youlin实验室

  源代码

  原始:https://juejin.cn/post/7102402219504320543