亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Golang 錯(cuò)誤捕獲Panic與Recover的使用

 更新時(shí)間:2022年03月22日 11:03:42   作者:頭禿貓輕王  
對于Go語言的錯(cuò)誤是通過返回值的方式,本文主要介紹了Golang 錯(cuò)誤捕獲Panic與Recover的使用,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、Golang 錯(cuò)誤是什么?

對于Go語言(Golang)的錯(cuò)誤是通過返回值的方式,來強(qiáng)迫調(diào)用者對錯(cuò)誤進(jìn)行處理,要么你通過 _ 忽略,要么你處理。對于這種設(shè)計(jì)方式,我們通常需要會(huì)寫大量的 if err != nil 判斷。我們可以通過方法來做到校驗(yàn)。

這類代碼非常的多,盡管工程中 error 大部分都是nil,也就是沒有任何錯(cuò)誤,但是非nil的時(shí)候,就意味著錯(cuò)誤就出現(xiàn)了。
在Go語言中,使用多值返回來返回錯(cuò)誤。Go中可以拋出一個(gè) panic 的異常,然后在 defe r中通過 recover 捕獲這個(gè)異常,然后再正常處理。

二、錯(cuò)誤校驗(yàn)

1.方法

當(dāng)存在錯(cuò)誤時(shí),我們通過方法來判斷是否 panic:

func Panic(err error) {

?? ?if err != nil {
?? ??? ?panic(err)
?? ?}
}

2.判斷錯(cuò)誤

代碼如下(示例):

若不采用方法

for _, c := range []string{"1", "2"} {

?? ??? ?atoi, err := strconv.Atoi(c)
?? ??? ?if err != nil {
?? ??? ??? ?return
?? ??? ?}
?? ??? ?fmt.Println(atoi)
?? ?}

若采用方法

但此時(shí) panic 還需要我們額外處理來將錯(cuò)誤捕獲

?? ?for _, c := range []string{"1", "2"} {

?? ??? ?atoi, err := strconv.Atoi(c)
?? ??? ?Panic(err)
?? ??? ?fmt.Println(atoi)
?? ?}

三、錯(cuò)誤捕獲

1.方法

當(dāng)存在錯(cuò)誤時(shí),我們通過recover來判斷 panic 是否產(chǎn)生:

func RecoverError() {

?? ?if err := recover(); err != nil {
?? ??? ?//輸出panic信息
?? ??? ?fmt.Println(err)

?? ??? ?//輸出堆棧信息
?? ??? ?fmt.Println(string(debug.Stack()))
?? ?}
}

2.defer 的使用

由于我們的捕獲必須在錯(cuò)誤產(chǎn)生之后,那我們就必須保證捕獲方法調(diào)用在錯(cuò)誤處理方法之后,也就是通過 defer 來控制方法的最后調(diào)用 :

func main() {
?? ?// 當(dāng)使用defer 時(shí),將會(huì)在程序內(nèi)方法結(jié)算后,
?? ?// 依照后進(jìn)先出的方法執(zhí)行defer內(nèi)方法
?? ?// 此時(shí)就能保證 捕獲程序一定能捕獲到錯(cuò)誤
?? ?defer RecoverError()
?? ?for _, c := range []string{"1", "2"} {

?? ??? ?atoi, err := strconv.Atoi(c)
?? ??? ?Panic(err)

?? ??? ?fmt.Println(atoi)
?? ?}

}

總結(jié)

通過以上來簡單熟悉Golang 與其他語言截然不同的錯(cuò)誤處理形式,由于其他語言開發(fā)者經(jīng)常將異常與控制結(jié)構(gòu)混在一起,這會(huì)很容易使得代碼變得混亂。開發(fā)者也很容易濫用異常,甚至一個(gè)小小的錯(cuò)誤都拋出一個(gè)異常。這在Golang中不被允許,Go語言也就不支持傳統(tǒng)的 try…catch…finally 這種異常,通過新的 defer panic recover 來進(jìn)行錯(cuò)誤處理。

到此這篇關(guān)于Golang 錯(cuò)誤捕獲Panic與Recover的使用的文章就介紹到這了,更多相關(guān)Golang 錯(cuò)誤捕獲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux環(huán)境下編譯并運(yùn)行g(shù)o項(xiàng)目的全過程

    Linux環(huán)境下編譯并運(yùn)行g(shù)o項(xiàng)目的全過程

    Go語言是Google的開源編程語言,廣泛應(yīng)用于云計(jì)算、分布式系統(tǒng)開發(fā)等領(lǐng)域,在Linux上也有大量的應(yīng)用場景,這篇文章主要給大家介紹了關(guān)于Linux環(huán)境下編譯并運(yùn)行g(shù)o項(xiàng)目的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • Go?Singleflight導(dǎo)致死鎖問題解決分析

    Go?Singleflight導(dǎo)致死鎖問題解決分析

    這篇文章主要為大家介紹了Go?Singleflight導(dǎo)致死鎖問題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • go語言csrf庫使用實(shí)現(xiàn)原理示例解析

    go語言csrf庫使用實(shí)現(xiàn)原理示例解析

    這篇文章主要為大家介紹了go語言csrf庫使用實(shí)現(xiàn)原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Go語言的文件操作代碼匯總

    Go語言的文件操作代碼匯總

    本文給大家匯總介紹了go語言中的文件操作的代碼,包括文件的讀寫,文件的新建打開和刪除等,希望對大家學(xué)習(xí)go語言能夠有所幫助
    2018-10-10
  • Go設(shè)計(jì)模式之狀態(tài)模式圖文詳解

    Go設(shè)計(jì)模式之狀態(tài)模式圖文詳解

    狀態(tài)模式是一種行為設(shè)計(jì)模式, 讓你能在一個(gè)對象的內(nèi)部狀態(tài)變化時(shí)改變其行為, 使其看上去就像改變了自身所屬的類一樣,本文將通過一些圖片來給大家詳細(xì)的介紹一下Go的狀態(tài)模式,需要的朋友可以參考下
    2023-08-08
  • go語言中函數(shù)與方法介紹

    go語言中函數(shù)與方法介紹

    這篇文章介紹了go語言中的函數(shù)與方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Go項(xiàng)目中添加生成時(shí)間與版本信息的方法

    Go項(xiàng)目中添加生成時(shí)間與版本信息的方法

    本文主要介紹了Go項(xiàng)目中添加生成時(shí)間與版本信息的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Go?Error?嵌套實(shí)現(xiàn)創(chuàng)建方式

    Go?Error?嵌套實(shí)現(xiàn)創(chuàng)建方式

    這篇文章主要介紹了Go?Error?嵌套到底是怎么實(shí)現(xiàn)的?大家都知道創(chuàng)建error有兩種方式分別是errors.new()另一種是fmt.errorf(),本文通過詳細(xì)例子給大家介紹,需要的朋友可以參考下
    2022-01-01
  • Golang unsafe.Sizeof函數(shù)代碼示例使用解析

    Golang unsafe.Sizeof函數(shù)代碼示例使用解析

    這篇文章主要為大家介紹了Golang unsafe.Sizeof函數(shù)代碼示例使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Go語言atomic.Value如何不加鎖保證數(shù)據(jù)線程安全?

    Go語言atomic.Value如何不加鎖保證數(shù)據(jù)線程安全?

    這篇文章主要介紹了Go語言atomic.Value如何不加鎖保證數(shù)據(jù)線程安全詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05

最新評論