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