要熟悉兩者區(qū)別之前,需要先了解 os.Exit() 函數(shù)。
我這里截一張 Go 源碼里面的解釋?zhuān)?/p>
我們需要注意兩點(diǎn):
1、應(yīng)用程序會(huì)被馬上退出
2、defer 函數(shù)不會(huì)被執(zhí)行
你可以理解這就是直接 kill -9 程序,不給任何喘氣的機(jī)會(huì)。
現(xiàn)在我們?cè)賮?lái)看看 log.Fatal 函數(shù)的定義:
整體來(lái)說(shuō),他在 os.Exit() 之前做了一個(gè)日志輸出。
他的流程可以理解是:
1、打印輸出內(nèi)容
2、退出應(yīng)用程序
3、defer 函數(shù)還是不會(huì)執(zhí)行
最后我們來(lái)看下 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ù),如果都沒(méi)函數(shù)處理這個(gè)異常,應(yīng)用程序就會(huì)停止
這和其他語(yǔ)言里面的 try catch 很像,但是 Go 語(yǔ)言里面沒(méi)有類(lèi)似的語(yǔ)法糖。
審核編輯:劉清
-
應(yīng)用程序
+關(guān)注
關(guān)注
38文章
3328瀏覽量
58875 -
go語(yǔ)言
+關(guān)注
關(guān)注
1文章
159瀏覽量
9330 -
調(diào)用函數(shù)
+關(guān)注
關(guān)注
0文章
11瀏覽量
2399
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論