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