详解中"/>
Go语言panic详解中
Go语言核心36讲 day05 学习笔记
上篇文章我们分析了一个简单panic,中包含的东西, 而这篇文章我们就来仔细的去探讨panic传播的具体过程。
假如现在有一个函数A, 函数中的某行代码引发了panic, A被另外一个函数B进行调用, B函数中某段代码也出现了panic, 然后函数B又被另外一个函数C调用了, 最终函数C又被main函数给调用了。
现在的问题是, 最终的panic信息会是什么样子:
答: panic的信息中首先会出现, A函数的panic, 其次才会出现B函数中的panic。
如果想知道上面的具体过程, 我们就需要明白panic传播的具体过程,
下面是panic传播的具体过程:
- 某个函数的某行代码无意间引发一个panic, 这时候, 初始的panic详情就会被建立起来, 并且该程序的控制权会立即从行代码转移到调用其所属函数的那行代码上, 也就是栈中上一级
- 这同时意味着此行代码所属函数的执行终止, 紧接着控制权不会在这里进行停留, 它又会立即转移到再上一级的调用代码处, 直到栈顶, 也就是最外层函数那里。
- 这里的最外层函数指的是go函数, 对于主的goroutine来讲就是main函数, 但是控制权也不会停留在这里, 而是被Go语言运行时系统收回。
- 随后, 程序崩溃并终止运行, 承载程序这次运行的进程也会随之死亡并消失, 与此同时,在这个控制权传播的过程中,panic 详情会被逐渐地积累和完善,并会在程序终止之前被打印出来。
更多推荐
Go语言panic详解中
发布评论