溫馨提示×

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

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

golang如何截獲錯(cuò)誤

發(fā)布時(shí)間:2020-05-08 15:31:36 來源:億速云 閱讀:102 作者:Leah 欄目:編程語言

今天小編就為大家?guī)硪黄猤olang如何截獲錯(cuò)誤的文章。小編覺得挺不錯(cuò)的,為此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。

golang如何截獲錯(cuò)誤

Golang中引入error接口類型作為錯(cuò)誤處理的標(biāo)準(zhǔn)模式,如果函數(shù)要返回錯(cuò)誤,則返回值類型列表中肯定包含error。error處理過程類

似于C語言中的錯(cuò)誤碼,可逐層返回,直到被處理。

Golang中引入兩個(gè)內(nèi)置函數(shù)panic和recover來觸發(fā)和終止異常處理流程,同時(shí)引入關(guān)鍵字defer來延遲執(zhí)行defer后面的函數(shù)。

一直等到包含defer語句的函數(shù)執(zhí)行完畢時(shí),延遲函數(shù)(defer后的函數(shù))才會(huì)被執(zhí)行,而不管包含defer語句的函數(shù)是通過return的正

常結(jié)束,還是由于panic導(dǎo)致的異常結(jié)束。你可以在一個(gè)函數(shù)中執(zhí)行多條defer語句,它們的執(zhí)行順序與聲明順序相反。

推薦學(xué)習(xí)《golang教程》

當(dāng)程序運(yùn)行時(shí),如果遇到引用空指針、下標(biāo)越界或顯式調(diào)用panic函數(shù)等情況,則先觸發(fā)panic函數(shù)的執(zhí)行,然后調(diào)用延遲函數(shù)。調(diào)用

者繼續(xù)傳遞panic,因此該過程一直在調(diào)用棧中重復(fù)發(fā)生:函數(shù)停止執(zhí)行,調(diào)用延遲執(zhí)行函數(shù)等。如果一路在延遲函數(shù)中沒有recover

函數(shù)的調(diào)用,則會(huì)到達(dá)該攜程的起點(diǎn),該攜程結(jié)束,然后終止其他所有攜程,包括主攜程(類似于C語言中的主線程,該攜程ID為

1)。

錯(cuò)誤和異常從Golang機(jī)制上講,就是error和panic的區(qū)別。很多其他語言也一樣,比如C++/Java,沒有error但有errno,沒有panic

但有throw。

Golang錯(cuò)誤和異常是可以互相轉(zhuǎn)換的:

錯(cuò)誤轉(zhuǎn)異常,比如程序邏輯上嘗試請(qǐng)求某個(gè)URL,最多嘗試三次,嘗試三次的過程中請(qǐng)求失敗是錯(cuò)誤,嘗試完第三次還不成功的話,

失敗就被提升為異常了。異常轉(zhuǎn)錯(cuò)誤,比如panic觸發(fā)的異常被recover恢復(fù)后,將返回值中error類型的變量進(jìn)行賦值,以便上層函數(shù)

繼續(xù)走錯(cuò)誤處理流程。

關(guān)于golang如何截獲錯(cuò)誤就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的參考價(jià)值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

向AI問一下細(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