【Go】Panic函數

來源:互聯網
上載者:User

標籤:run   調用   控制器   消失   user   span   絕對路徑   err   index   

  panic(運行時恐慌)是一種只會在程式運行時才回拋出來的異常。在panic被拋出之後,如果沒有在程式裡添加任何保護措施的話,程式就會在列印出panic的詳情,終止運行。

  舉個栗子

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

  運行上面的代碼,會拋出panic

panic: runtime error: index out of rangegoroutine 1 [running]:   //Id為1的goroutine在此panic被引發時正在運行main.main() /Users/haolin/GeekTime/Golang_Puzzlers/src/puzzlers/article19/q0/demo47.go:5 +0x3d  //此行代碼在其所屬源碼檔案中的行數,以及源碼檔案的絕對路徑, +03d是計數位移量,用處不大。exit status 2  //以退出狀態代碼2結束運行,一般狀態不為0時表示程式非正常退出

 

 從Painc被引發到程式終止啟動並執行大致過程是怎樣的?

  某個函數中的某行代碼引發了一個panic後,初始的panic詳情會被建立起來,並且該程式的控制器會立即從此行代碼轉移到調用其所屬函數的那行代碼上(調用棧中的上一級),此行代碼所屬函數的執行隨即終止。緊接著,控制權並不會在此有片刻停留,它又會立即轉移至上一級的調用代碼處,反方向傳播直至最外層函數(go函數,對於主goroutine來說就是main函數)。但是控制器也不會停留在那裡,而是被Go語言運行時系統收回。隨後程式奔潰並終止運行,承載程式這次啟動並執行進程也會隨之死亡並消失。與此同時,在這個控制器傳播過程中,panic詳情會積累和完善,並在程式終止之前列印出來。

//main函數調用了caller1函數,caller1函數調用了caller2函數goroutine 1 [running]:main.caller2() /Users/haolin/GeekTime/Golang_Puzzlers/src/puzzlers/article19/q1/demo48.go:22 +0x91main.caller1() /Users/haolin/GeekTime/Golang_Puzzlers/src/puzzlers/article19/q1/demo48.go:15 +0x66main.main() /Users/haolin/GeekTime/Golang_Puzzlers/src/puzzlers/article19/q1/demo48.go:9 +0x66exit status 2

 

【Go】Panic函數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.