今天小編就為大家?guī)?lái)一篇golang如何截獲錯(cuò)誤的文章。小編覺(jué)得挺不錯(cuò)的,為此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。
創(chuàng)新互聯(lián)建站于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元崇禮做網(wǎng)站,已為上家服務(wù),為崇禮各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108Golang中引入error接口類型作為錯(cuò)誤處理的標(biāo)準(zhǔn)模式,如果函數(shù)要返回錯(cuò)誤,則返回值類型列表中肯定包含error。error處理過(guò)程類
似于C語(yǔ)言中的錯(cuò)誤碼,可逐層返回,直到被處理。
Golang中引入兩個(gè)內(nèi)置函數(shù)panic和recover來(lái)觸發(fā)和終止異常處理流程,同時(shí)引入關(guān)鍵字defer來(lái)延遲執(zhí)行defer后面的函數(shù)。
一直等到包含defer語(yǔ)句的函數(shù)執(zhí)行完畢時(shí),延遲函數(shù)(defer后的函數(shù))才會(huì)被執(zhí)行,而不管包含defer語(yǔ)句的函數(shù)是通過(guò)return的正
常結(jié)束,還是由于panic導(dǎo)致的異常結(jié)束。你可以在一個(gè)函數(shù)中執(zhí)行多條defer語(yǔ)句,它們的執(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,因此該過(guò)程一直在調(diào)用棧中重復(fù)發(fā)生:函數(shù)停止執(zhí)行,調(diào)用延遲執(zhí)行函數(shù)等。如果一路在延遲函數(shù)中沒(méi)有recover
函數(shù)的調(diào)用,則會(huì)到達(dá)該攜程的起點(diǎn),該攜程結(jié)束,然后終止其他所有攜程,包括主攜程(類似于C語(yǔ)言中的主線程,該攜程ID為
1)。
錯(cuò)誤和異常從Golang機(jī)制上講,就是error和panic的區(qū)別。很多其他語(yǔ)言也一樣,比如C++/Java,沒(méi)有error但有errno,沒(méi)有panic
但有throw。
Golang錯(cuò)誤和異常是可以互相轉(zhuǎn)換的:
錯(cuò)誤轉(zhuǎn)異常,比如程序邏輯上嘗試請(qǐng)求某個(gè)URL,最多嘗試三次,嘗試三次的過(guò)程中請(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é)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。