[Golang]panic是什么?-心智图总结

1. panic是什么?
程式在运行时,发生意料之外的程式异常。例如: 访问,不存在的array。
panic,可以翻译成,运行时恐慌。

2. panic的错误讯息、退出状态码

package mainfunc main() {s1 := []int{0, 1, 2, 3, 4}e5 := s1[5]_ = e5}

https://play.golang.org/p/J1SGtPc1t4Z

以下,对错误代码说明。

panic: runtime error: index out of range [5] with length 5

这一行,其中的"runtime error"的涵义,这是ㄧ个runtime程式码包中抛出的panic。

goroutine 1 [running]

代表有一个ID为1的goroutine在此panic被引发的时候,正在运行。

main.main()/tmp/sandbox585672283/prog.go:5 +0x1b

表示,这个 main package的main函数。下一行,指出哪一行程式码发生panic。

Program exited: status 2.

表示,这个程式退出的状态代码是2,结束运行。
只要退出状态代码不是0,就意味着程式运行非正常结束。

3. panic引发到程式终止,大致过程
某个函数中的某一行程式码,有意或者无意地引发panic。
从这个时候开始,panic情况会被纪录起来,并且该程式的控制权,会立即从此行程式码转移至,呼叫其所属函数的那一行程式码上。

这也意味着,发生panic的程式码,执行立即终止。然后,控制权又会立即转移至上一级,呼叫的程式码处。控制权会ㄧ级ㄧ级,沿着呼叫方的反方向传播到顶端,也就是我们编写的最外层函数那里。

这里的最外层函数指的是Go函数,对于主 goroutine来说,就是 main函数。但控制权也不会停留在那里,而是被Go语言运行系统回收。

然后,程式崩溃并终止运行。panic的情况会随着传播过程,逐渐地累积,并在程式终止之前印出来。

http://img2.58codes.com/2024/20131728Ki7Sk9pTIJ.png
参考来源:
郝林-Go语言核心36讲
https://github.com/hyper0x/Golang_Puzzlers


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章