最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go錯誤處理之panic函數(shù)和recover函數(shù)使用及捕獲異常方法

 更新時間:2023年03月24日 10:23:07   作者:雨雨不怕雨  
這篇文章主要介紹了Go錯誤處理之panic函數(shù)使用及捕獲,本篇探討了如何使用 panic 和 recover 來處理 Go 語言中的異常,需要的朋友可以參考下

前言

前面我們講過了error類型來處理一般的錯誤,本文會描述使用panic函數(shù)和recover函數(shù)來處理比較極端的錯誤。簡單來說,當程序運行時遇到無法處理的錯誤或異常情況時,會調用panic函數(shù)引發(fā)一個運行時錯誤,此時程序會終止執(zhí)行并拋出錯誤信息。為了避免程序崩潰,可以使用recover函數(shù)來捕獲錯誤,并進行處理或恢復程序的執(zhí)行,通常recover函數(shù)寫在defer語句中。

panic函數(shù)

panic函數(shù)是內置的一個函數(shù),他的結構如下:

func panic(v interface{})

此函數(shù)接受一個接口類型的值,這個值通常是錯誤的描述,調用次函數(shù)后,會引發(fā)異常,這將中止當前的程序流程,并在堆棧中記錄當前的異常信息。此函數(shù)可以被主動調用,也可以在發(fā)生數(shù)組越界、空指針引用等情況下被動調用。

我們將上篇文章的除法例子進行小小的修改,使用panic進行錯誤處理:

package main

import (
   "fmt"
)

func divide(a, b int) int{
   if b == 0 {
      panic("division by zero")
   }
   return a / b
}

func main() {
   result := divide(10, 0)
   fmt.Println("the result is ",result)
}

運行后,程序直接退出了,報division by zero錯誤。

recover函數(shù)

有些時候,我們不希望panic函數(shù)直接粗暴的退出,這時候我們可以使用recover函數(shù)對pannic進行捕獲,注意,recover函數(shù)只能寫在defer關鍵字之后哦!

recover也是內置函數(shù),他的結構如下:

func recover() interface{}

他能捕獲到的panic函數(shù)報出的錯誤,并使用接口類型進行返回。

我們使用recover對例子再次修改,讓程序可以繼續(xù)的運行,而不是粗暴的退出,代碼如下:

package main

import (
   "fmt"
)

func divide(a, b int) int{
   defer func() {
      if err:=recover();err!=nil {
         fmt.Printf("runtime panic : %v\n", err)
      }
   }()
   if b == 0 {
      panic("division by zero")
   }
   return a / b
}

func main() {
   result := divide(10, 0)
   fmt.Println("the result is ",result)
}

總結

本篇博客探討了如何使用 panic 和 recover 來處理 Go 語言中的異常。當程序遇到無法處理的錯誤時,它可以使用 panic 函數(shù)引發(fā)異常,并使用 recover 函數(shù)結合defer關鍵詞從異常中恢復。

到此這篇關于Go錯誤處理之panic函數(shù)和recover函數(shù)使用及捕獲異常方法的文章就介紹到這了,更多相關go異常捕獲panic 和 recover內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • golang panic及處理機制

    golang panic及處理機制

    Go語言追求簡潔優(yōu)雅,所以,Go語言不支持傳統(tǒng)的 try…catch…finally 這種異常,因為Go語言的設計者們認為,將異常與控制結構混在一起會很容易使得代碼變得混亂,今天給大家介紹golang panic及處理機制,需要的朋友參考下吧
    2021-08-08
  • golang?基于?mysql?簡單實現(xiàn)分布式讀寫鎖

    golang?基于?mysql?簡單實現(xiàn)分布式讀寫鎖

    這篇文章主要介紹了golang?基于mysql簡單實現(xiàn)分布式讀寫鎖,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • golang的HTTP基本認證機制實例詳解

    golang的HTTP基本認證機制實例詳解

    這篇文章主要介紹了golang的HTTP基本認證機制,結合實例形式較為詳細的分析了HTTP請求響應的過程及認證機制實現(xiàn)技巧,需要的朋友可以參考下
    2016-07-07
  • 深入了解Golang為什么需要超時控制

    深入了解Golang為什么需要超時控制

    本文將介紹為什么需要超時控制,然后詳細介紹Go語言中實現(xiàn)超時控制的方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-05-05
  • Go語言特點及基本數(shù)據(jù)類型使用詳解

    Go語言特點及基本數(shù)據(jù)類型使用詳解

    這篇文章主要為大家介紹了Go語言特點及基本數(shù)據(jù)類型使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • Go語言中break label與goto label的區(qū)別

    Go語言中break label與goto label的區(qū)別

    這篇文章主要介紹了Go語言中break label與goto label的區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 深入了解Golang的指針用法

    深入了解Golang的指針用法

    與C語言一樣,Go語言中同樣有指針,通過指針,我們可以只傳遞變量的內存地址,而不是傳遞整個變量,這在一定程度上可以節(jié)省內存的占用。本文將通過示例詳細講講Golang的指針用法,需要的可以參考一下
    2022-07-07
  • Go語言Telnet回音服務器的實現(xiàn)

    Go語言Telnet回音服務器的實現(xiàn)

    這篇文章主要介紹了Go語言Telnet回音服務器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • 解讀golang中的const常量和iota

    解讀golang中的const常量和iota

    這篇文章主要介紹了golang中的const常量和iota,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 深入淺出Golang中的sync.Pool

    深入淺出Golang中的sync.Pool

    sync.Pool是可伸縮的,也是并發(fā)安全的,其大小僅受限于內存大小。本文主要為大家介紹一下Golang中sync.Pool的原理與使用,感興趣的小伙伴可以了解一下
    2023-03-03

最新評論

青阳县| 合江县| 合川市| 金华市| 郧西县| 尼勒克县| 焦作市| 海林市| 罗甸县| 扬中市| 枣阳市| 都江堰市| 突泉县| 东台市| 高尔夫| 新密市| 渝中区| 河津市| 出国| 汽车| 梅河口市| 延长县| 沁源县| 绥化市| 来安县| 高青县| 晋中市| 乃东县| 灌南县| 宝坻区| 孟津县| 长岭县| 酒泉市| 建湖县| 和平县| 寻乌县| 天水市| 普定县| 新闻| 东安县| 务川|