Go語言---異常處理error、panic、recover

異常處理

Go 語言引入了一個關于錯誤處理的標準模式,即 error 接口,它是 Go 語言內建的接口類型,該接口的定義如下:

package errorsfunc New(text string) error {return &errorString{text}
}// errorString is a trivial implementation of error.
type errorString struct {s string
}func (e *errorString) Error() string {return e.s
}
  • 通過fmt包進行使用errorf接口
  • 通過自帶的errors包進行調用
    在這里插入圖片描述

常用在我們對檢測程序是否正常

在這里插入圖片描述

panic

在通常情況下,向程序使用方報告錯誤狀態的方式可以是返回一個額外的 error 類型值。
但是,當遇到不可恢復的錯誤狀態的時候,如數組訪問越界、空指針引用等,這些運行時錯誤會引起 painc 異常。在一般情況下,我們不使用 panic 函數來報告普通的錯誤,而應該只把它作為報告致命錯誤的一種方式。當某些不應該發生的場景發生時,就調用panic。
一般而言,當 panic異常發生時,程序會中斷運行,并立即執行在該 goroutine(可以先理解成線程,在中被延遲的函數(defer機制)。隨后,程序崩潰并輸出日志信息。日志信息包括 panic value 和函數調用的堆棧跟蹤信息。
不是所有的 panic 異常都來自運行時,直接調用內置的 panic 函數也會引發 panic 異常: panic函數接受任何值作為參數。

func panic(v interface{})

直接調用panic函數

直接調用內置的 panic 函數也會引發 panic 異常。
在這里插入圖片描述

數組越界導致panic

在這里插入圖片描述

recover

運行時 panc 異常一旦被引發就會導致程序崩潰。Go語言為我們提供了專用于“攔截”運行時 panic 的內建所數–recover。它可以是當前的程序從運行時 panic 的狀態中恢復并重新獲得流程控制權。

fune recover()interface{}

注意:recover只有在defer調用的所數中有效。

如果調用了內置函數recover,并且定義該 defer 語句的函數發生了 panic 異常,recover 會使程序從 panic 中恢復,并返回 panic value。導致panic 異常的函數不會繼續運行,但能正常返回。在未發生 panic 時調用recover,recover 會返回 nil。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43439.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43439.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43439.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springboot事故車輛與違章車輛跟蹤系統-計算機畢業設計源碼03863

springboot事故車輛與違章車輛跟蹤系統 摘 要 科技進步的飛速發展引起人們日常生活的巨大變化,電子信息技術的飛速發展使得電子信息技術的各個領域的應用水平得到普及和應用。信息時代的到來已成為不可阻擋的時尚潮流,人類發展的歷史正進入一個新時代。…

W外鏈怎么樣,他們家的短網址免費的嗎?

W外鏈作為短網址服務的一種,體現了短網址技術的現代發展趨勢,它不僅提供了基礎的網址縮短功能,還擴展了一系列高級特性和增值服務,以適應更廣泛的市場需求。根據相關參考內容,W外鏈具有以下特點和優勢: 短域…

2024程序員行業風口和面試寶典

國際研究機構Gartner會在每年10月份左右發布下一年度的戰略發展趨勢預測,并在次年3月左右發布和網絡安全相關的趨勢預測。綠盟科技通過將近3年的趨勢預測進行分組對比分析后發現,除了眾人皆知的AI技術應用外,數據模塊化、身份優先安全、行業云…

軟考高級第四版備考--第13天(控制質量)Perform Quanlity Control

定義:為了評估績效,確保項目輸出完整、正確且滿足客戶期望而監督和記錄質量管理活動執行結果的過程。 作用: 核實項目可交付成果和工作已經達到主要干系人的質量要求,可供最終驗收;確定項目輸出是否達到預期的目的&a…

01-圖像基礎-顏色空間

1.RGB顏色空間 RGB是一種常用的顏色空間,比如一幅720P的圖像,所對應的像素點個數是1280*720,每一個像素點由三個分量構成,分別是R,G,B。 R代表紅色分量,G代表綠色分量,B代表藍色分量,以24位色來…

加密與安全_密鑰體系的三個核心目標之不可否認性解決方案

文章目錄 Pre概述不可否認性數字簽名(Digital Signature)證書是什么證書使用流程 PKICA證書層級多級證書證書鏈是如何完成認證的? 其他疑問1. Alice能直接獲取Bob的公鑰,是否還需要證書?2. 為什么即使能直接獲取公鑰也…

理解機器學習中的潛在空間(Understanding Latent Space in Machine Learning)

1、什么是潛在空間? If I have to describe latent space in one sentence, it simply means a representation of compressed data. 如果我必須用一句話來描述潛在空間,它只是意味著壓縮數據的表示。 想象一個像上面所示的手寫數字(0-9&…

vue學習day01-vue的概念、創建Vue實例、插值表達式、響應式、安裝Vue開發者工具

1、vue的概念 Vue是一個用于構建用戶界面的漸進式 框架 (1)構建用戶界面:基于數據動態渲染頁面 (2)漸進式:循序漸進的學習 (3)框架:一條完整的項目解決方案&#xff…

GenAl如何改變 DevOps 中的軟件測試?

TestComplete 是一款自動化UI測試工具,這款工具目前在全球范圍內被廣泛應用于進行桌面、移動和Web應用的自動化測試。 TestComplete 集成了一種精心設計的自動化引擎,可以自動記錄和回放用戶的操作,方便用戶進行UI(用戶界面&…

RTK_ROS_導航(2):衛星圖查看

目錄 1. 基于MapViz的衛星圖查看 1. 基于MapViz的衛星圖查看 安裝 # 源碼安裝 mkdir -p RTK_VISION/src cd RTK_VISION/src git clone https://github.com/swri-robotics/mapviz.git --branchmelodic-eol sudo apt-get install ros-$ROS_DISTRO-mapviz ros-$ROS_DISTRO-mapviz-…

IP-GUARD如何禁止電腦自帶攝像頭

IP-GUARD可以通過設備管理模塊禁止USB接口,所以USB外置攝像頭很容易就可以禁止了。 但是筆記本自帶攝像頭無法禁止,配置客戶端策略如下: device_control_unknown_mode1 device_control_unphysical_mode3

純電車的OBD接口

盡管傳統汽車的OBD接口主要用于監控和報告排放數據,但純電動車輛作為零排放的交通工具,其設計初衷與需求截然不同。因此,從法律條文和車管所的規定來看,純電動車輛是否仍需配置OBD接口這一問題,確實值得探討。理論上&a…

ABAP中ARFC_GET_TID函數詳細的使用方法

在ABAP中,ARFC_GET_TID 函數模塊用于以十六進制形式返回終端的IP地址。這個功能在需要獲取當前會話或終端的網絡地址信息時非常有用,比如在日志記錄、安全審計或網絡診斷等場景中。 詳細使用方法 調用函數模塊 ARFC_GET_TID 函數的調用通常很直接&…

記一次 Qt installer framework安裝程序過程中 安裝驅動依賴

在installscript.qs 文件中該函數添加exe 依賴程序放置位置

Spring @Value獲取數組、集合、map等不同結構方法

Spring 架構中,可以使用Value注解從配置文件或命令行參數中獲取集合數據。 各種示例 獲取基礎類型 當沒有配置時,可以設置默認值。無默認值時會拋出空值異常。 Value("${lizz.timeout:3000}")private int timeout;Value("${lizz.key:…

Python28-11 CatBoost梯度提升算法

CatBoost(Categorical Boosting)是由Yandex(一家俄羅斯互聯網企業,旗下的搜索引擎曾在俄國內擁有逾60%的市場占有率,同時也提供其他互聯網產品和服務)開發的一種基于梯度提升的機器學習算法。CatBoost特別擅長處理類別特征&#x…

什么是ThingsKit物聯網平臺?

在信息化時代的浪潮中,物聯網(IoT)作為新一代信息技術的核心,已經逐漸滲透到我們生活的方方面面。而在這個大背景下,Thingskit物聯網平臺以其獨特的技術優勢和應用場景,成為了物聯網領域的一顆璀璨明星。本…

AI和人工智能是啥關系?

AI(人工智能)與通用人工智能(AGI)是人工智能領域中的兩個重要概念,它們在定義、技術基礎以及應用領域等方面有所區別。人工智能(AI),是指使計算機和其他機器模擬人類智能的技術&…

3.flink架構

目錄 概述 概述 Flink是一個分布式的帶有狀態管理的計算框架,為了執行流應用程序,可以和 Hadoop YARN 、K8s 進行整合,當然也可以是一個 standalone 。 官方地址:速遞 k8s 是未來的一種趨勢,對資源管控能力強。

Windows 控制中心在哪里打開,七種方法教會你

在 Windows 操作系統中,控制中心的概念可能稍有些混淆,因為 Windows 通常使用“控制面板”這一術語來指代用于配置系統設置和更改硬件及軟件設置的中心區域。 不過,隨著 Windows 的更新,微軟也在逐步將一些設置遷移到“設置”應用…