要熟悉兩者區別之前,需要先了解 os.Exit() 函數。
我這里截一張 Go 源碼里面的解釋:
我們需要注意兩點:
1、應用程序會被馬上退出
2、defer 函數不會被執行
你可以理解這就是直接 kill -9 程序,不給任何喘氣的機會。
現在我們再來看看 log.Fatal 函數的定義:
整體來說,他在 os.Exit() 之前做了一個日志輸出。
他的流程可以理解是:
1、打印輸出內容
2、退出應用程序
3、defer 函數還是不會執行
最后我們來看下 panic 的定義:
我們需要注意的是:
1、當前函數立刻會停止執行(不是主程序)
2、defer 函數執行
3、返回給調用者 caller
4、調用函數假裝也收到了 panic 函數,從而他們也會執行以上的操作
5、遞歸執行,直到最上層函數,如果都沒函數處理這個異常,應用程序就會停止
這和其他語言里面的 try catch 很像,但是 Go 語言里面沒有類似的語法糖。
審核編輯:劉清
-
應用程序
+關注
關注
37文章
3268瀏覽量
57705 -
go語言
+關注
關注
1文章
158瀏覽量
9049 -
調用函數
+關注
關注
0文章
11瀏覽量
2315
發布評論請先 登錄
相關推薦
評論