欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

1.方法

當(dāng)存在錯(cuò)誤時(shí),我們通過(guò)方法來(lái)判斷是否 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 還需要我們額外處理來(lái)將錯(cuò)誤捕獲

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

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

三、錯(cuò)誤捕獲

1.方法

當(dāng)存在錯(cuò)誤時(shí),我們通過(guò)recover來(lái)判斷 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ò)誤處理方法之后,也就是通過(guò) defer 來(lái)控制方法的最后調(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é)

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

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

相關(guān)文章

  • Golang map實(shí)現(xiàn)原理深入分析

    Golang map實(shí)現(xiàn)原理深入分析

    map是一種無(wú)序的基于key-value的數(shù)據(jù)結(jié)構(gòu),Go語(yǔ)言中的map是引用類型,必須初始化才能使用,下面這篇文章主要給大家介紹了關(guān)于golang中map使用的幾點(diǎn)注意事項(xiàng),需要的朋友可以參考下
    2023-01-01
  • Golang中設(shè)置全局變量并在其他文件中使用

    Golang中設(shè)置全局變量并在其他文件中使用

    全局變量是被整個(gè)程序都可見(jiàn)的變量,通常用于存儲(chǔ)程序中需要共享的數(shù)據(jù),本文就來(lái)介紹一下Golang中設(shè)置全局變量并在其他文件中使用的方法,感興趣的可以了解一下
    2024-01-01
  • go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之前綴樹(shù)Trie

    go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之前綴樹(shù)Trie

    這篇文章主要介紹了go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之前綴樹(shù)Trie,文章圍繞主題展開(kāi)詳細(xì)內(nèi)容介紹,具有一定得參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • Go語(yǔ)言標(biāo)準(zhǔn)輸入輸出庫(kù)的基本使用教程

    Go語(yǔ)言標(biāo)準(zhǔn)輸入輸出庫(kù)的基本使用教程

    輸入輸出在任何一門(mén)語(yǔ)言中都必須提供的一個(gè)功能,下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言標(biāo)準(zhǔn)輸入輸出庫(kù)的基本使用,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • Go中函數(shù)的使用細(xì)節(jié)與注意事項(xiàng)詳解

    Go中函數(shù)的使用細(xì)節(jié)與注意事項(xiàng)詳解

    在Go語(yǔ)言中函數(shù)可是一等的(first-class)公民,函數(shù)類型也是一等的數(shù)據(jù)類型,下面這篇文章主要給大家介紹了關(guān)于Go中函數(shù)的使用細(xì)節(jié)與注意事項(xiàng)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • 詳解Go語(yǔ)言中調(diào)度器的原理與使用

    詳解Go語(yǔ)言中調(diào)度器的原理與使用

    這篇文章主要介紹了Go語(yǔ)言運(yùn)行時(shí)調(diào)度器的實(shí)現(xiàn)原理,其中包含調(diào)度器的設(shè)計(jì)與實(shí)現(xiàn)原理、演變過(guò)程以及與運(yùn)行時(shí)調(diào)度相關(guān)的數(shù)據(jù)結(jié)構(gòu),希望對(duì)大家有所幫助
    2023-07-07
  • go語(yǔ)言map字典刪除操作的方法

    go語(yǔ)言map字典刪除操作的方法

    這篇文章主要介紹了go語(yǔ)言map字典刪除操作的方法,實(shí)例分析了map字典操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • GoLang之標(biāo)準(zhǔn)庫(kù)encoding/json包

    GoLang之標(biāo)準(zhǔn)庫(kù)encoding/json包

    本文主要介紹了GoLang之標(biāo)準(zhǔn)庫(kù)encoding/json包,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Golang繪制數(shù)列趨勢(shì)圖的操作步驟

    Golang繪制數(shù)列趨勢(shì)圖的操作步驟

    數(shù)列趨勢(shì)圖是用來(lái)表示數(shù)列中各項(xiàng)之間的變化趨勢(shì)的圖形,它可以幫助我們觀察和分析數(shù)列的規(guī)律和特點(diǎn),一般來(lái)說(shuō),數(shù)列趨勢(shì)圖可以分為兩種類型:折線圖和散點(diǎn)圖,本文給大家介紹了Golang繪制數(shù)列趨勢(shì)圖的操作步驟,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2024-04-04
  • go語(yǔ)言beego框架jwt身份認(rèn)證實(shí)現(xiàn)示例

    go語(yǔ)言beego框架jwt身份認(rèn)證實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了go語(yǔ)言beego框架jwt身份認(rèn)證實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04

最新評(píng)論