1. panic是什麽?
程序在运行时,发生意料之外的程序异常。例如: 访问,不存在的array。
panic,可以翻译成,运行时恐慌。
2. panic的错误讯息、退出状态码
package main
func 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的情况会随着传播过程,逐渐地累积,并在程序终止之前印出来。
参考来源:
郝林-Go语言核心36讲
https://github.com/hyper0x/Golang_Puzzlers
一般来说,ARM组合语言,目前大部分是称作嵌入式系统,大部分会说它是写到韧体里面的程序语言,就是硬体...
Hello 大家, 上三天就放假了~~ 但还是觉得好累= = 周休二日真的不够, 至少每周可以在家上...
说明 说明 1.根结点中的两边固定一边大另一边小。 2.下方节点当作新的根结点,继续符合一边大一边小...
TiDB可以同步MySQL的资料异动,那麽能不能反过来让其他DB同步随着TiDB异动呢。 答案是可以...
肥羊波浪理论 标准型》以5%价格涨跌,卖买5%股票数量 频繁型》以2.5%价格涨跌,卖买2.5%股票...