iT邦幫忙

0

[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


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言