美文网首页
go 的 panic 实现原理

go 的 panic 实现原理

作者: wayyyy | 来源:发表于2022-08-31 01:59 被阅读0次

Go 语言开发的程序遇到错误,比较常见的做法是返回 error 给调用者,但对于危险的操作,比如内存越界,则会显示触发panic
同样是退出程序,与 os.Exist 相比,panic 退出的方式比较优雅,panic 会做一定的善后动作,比如处理 defer函数以及支持使用 recover 消除 panic

工作流程:

image.png

在panic 执行过程中有几个要点注意:

  • panic 会递归执行是协程中所有的 defer,与函数正常退出时的执行顺序一致。
  • panic 不会处理其他协程中的 defer
  • 当前协程中的 defer 处理完成之后,触发程序退出。
  • 如果在panic 的执行过程中任意一个defer 函数执行了 recover(),那么 panic 的处理流程就会终止。
  • 如果在 panic 函数中再次发生了 panic,程序立即终止当前 defer 函数的执行,然后继续执行接下来的 panic 流程,只是当前 defer 函数中 panic 后面的语句就没有机会执行。

panic 实际实现是/src/runtime/panic.go:gopanic

数据结构

TODO

没有defer 函数

TODO

defer 函数处理

TODO

嵌套panic

TODO

相关文章

  • go 的 panic 实现原理

    Go 语言开发的程序遇到错误,比较常见的做法是返回 error 给调用者,但对于危险的操作,比如内存越界,则会显示...

  • Go教程第三十篇:故障及恢复

    panic-and-recover 本文是《Go系列教程》的第三十篇文章。 什么是panic ? Go程序处理异常...

  • go map并发panic实现

    某厂面试 面试官:map是并发安全的吗?我:不是面试官:那并发访问会怎样我:触发panic面试官:那这个panic...

  • go/panic

    索引越界引发panic 输出 使用recover 输出

  • Go语言——垃圾回收GC

    Go语言——垃圾回收GC 参考: Go 垃圾回收原理 Golang源码探索(三) GC的实现原理 Getting ...

  • 重定向stderr记录go进程崩溃日志

    go语言实现的进程在遇到panic、非法内存访问、未加锁的并发访问等情况时会崩溃并将stack backtrace...

  • 5 - 错误和异常

    Go 中没有异常机制 使用 errors.New( ) 创建一个错误 panic 用于不可恢复的错误 panic ...

  • golang panic原理

    要了解panic,建议先去看一下defer的原理,具体不展开,这里只说panic。 _panic是个结构体,存储了...

  • 2018-05-24raft实现代码

    1.go语言实现raft分发原理main.go 文件代码如下

  • 32. panic 和 recover

    32. panic 和 recover 什么是 panic? 在 Go 语言中,程序中一般是使用[错误]来处理异常...

网友评论

      本文标题:go 的 panic 实现原理

      本文链接:https://www.haomeiwen.com/subject/sjsvwrtx.html