溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Golang中異常處理機(jī)制的示例分析

發(fā)布時(shí)間:2021-06-09 09:47:22 來(lái)源:億速云 閱讀:142 作者:小新 欄目:開(kāi)發(fā)技術(shù)

小編給大家分享一下Golang中異常處理機(jī)制的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

前言

通常我們需要編寫(xiě)好的錯(cuò)誤處理方式,在了避免某些程序員濫用異常,于是Go這里直接把異常這一塊給砍掉了,最終還是通過(guò)返回值來(lái)判斷程序的異常情況,畢竟Go可是支持多返回值的語(yǔ)言,比如atoi、itoa等函數(shù),就不能忽略它的第二個(gè)返回值,因?yàn)榈诙€(gè)返回值代表了轉(zhuǎn)換是否成功!不過(guò)Golang還是提供了一些錯(cuò)誤處理機(jī)制的

Golang中異常處理機(jī)制的示例分析

Go的錯(cuò)誤機(jī)制

1、沒(méi)有異常機(jī)制

2、error類型實(shí)現(xiàn)了error接口

3、可以通過(guò)errors.New來(lái)快速創(chuàng)建錯(cuò)誤實(shí)例

type error interface{
    Error() string
}

error.New("n must be in range[0, 1]")

Golang中異常處理機(jī)制的示例分析

但是這樣做只是給開(kāi)發(fā)者標(biāo)識(shí),Code怎么認(rèn)識(shí)呢?難道去string里判斷嗎?當(dāng)然不是,可以預(yù)定義一些錯(cuò)誤:

Golang中異常處理機(jī)制的示例分析

處理錯(cuò)誤最佳實(shí)踐

1、預(yù)定義錯(cuò)誤,code里判斷

2、及早失敗,避免嵌套

panic與recover

panic用于不可恢復(fù)的錯(cuò)誤,類似于Java的Error
panic退出前會(huì)執(zhí)行defer指定的內(nèi)容

panic和os.Exit
os.Exit退出時(shí)不會(huì)調(diào)用defer指定的函數(shù)
os.Exit退出時(shí)不會(huì)輸出當(dāng)前調(diào)用棧信息

Golang中異常處理機(jī)制的示例分析

接下來(lái)看看recover

在Java中如果你不知道要拋出什么錯(cuò)誤,于是乎很多人直接來(lái)個(gè)Catch Throwable,作為一個(gè)異常無(wú)Fack說(shuō),C++中是直接catch…作為一個(gè)異常無(wú)Fack說(shuō)

Golang中異常處理機(jī)制的示例分析

在Go語(yǔ)言中可以通過(guò)defer定義的函數(shù)去執(zhí)行一些錯(cuò)誤恢復(fù)的行為

Golang中異常處理機(jī)制的示例分析

很多人容易在defer處理錯(cuò)誤時(shí)把recover獲得的錯(cuò)誤對(duì)象打印到日志文件中,這是一種非常危險(xiǎn)的做法,一定要當(dāng)心recover在做的事情,因?yàn)閞ecover的時(shí)候并不去檢測(cè)到底發(fā)生了什么錯(cuò)誤,而是直接忽略了這個(gè)錯(cuò)誤,那么如果這個(gè)時(shí)候系統(tǒng)的核心資源消耗完了,如果我們強(qiáng)制性的恢復(fù)的話系統(tǒng)仍然是不能正常工作的,還會(huì)導(dǎo)致我們的健康檢查程序沒(méi)辦法檢查出當(dāng)前系統(tǒng)的問(wèn)題,因?yàn)楹芏嗟膆ealth check只是檢查進(jìn)程在還是不在,因?yàn)槲覀兊倪M(jìn)程是在的,所以會(huì)導(dǎo)致僵尸服務(wù)進(jìn)程,雖然活著但是無(wú)法正常提供服務(wù)。于是我們可以采用恢復(fù)設(shè)計(jì)模式中的一種叫做Let it Crash ,health check進(jìn)程就會(huì)幫我們重啟這個(gè)服務(wù)

Golang中異常處理機(jī)制的示例分析

以上是“Golang中異常處理機(jī)制的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI