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

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的情况会随着传播过程,逐渐地累积,并在程序终止之前印出来。

https://ithelp.ithome.com.tw/upload/images/20201104/20131728Ki7Sk9pTIJ.png
参考来源:
郝林-Go语言核心36讲
https://github.com/hyper0x/Golang_Puzzlers


<<:  我流理解---JavaScript ES6---1

>>:  我流理解---JavaScript ES6---2

Day 3 ARM的多样性与开发环境

一般来说,ARM组合语言,目前大部分是称作嵌入式系统,大部分会说它是写到韧体里面的程序语言,就是硬体...

Day09 iPhone捷径-位置Part1

Hello 大家, 上三天就放假了~~ 但还是觉得好累= = 周休二日真的不够, 至少每周可以在家上...

【资料结构】二元树的删除

说明 说明 1.根结点中的两边固定一边大另一边小。 2.下方节点当作新的根结点,继续符合一边大一边小...

D17 - 从TiDB将资料同步出去

TiDB可以同步MySQL的资料异动,那麽能不能反过来让其他DB同步随着TiDB异动呢。 答案是可以...

show hand 下赌金似乎是好买法 - 肥羊波浪理论

肥羊波浪理论 标准型》以5%价格涨跌,卖买5%股票数量 频繁型》以2.5%价格涨跌,卖买2.5%股票...