1. 程式人生 > >go語言捕獲panic異常並轉化為error

go語言捕獲panic異常並轉化為error

package main

import (
       "fmt"
       "errors"
)

func testPanic2Error() (err error)  {

       //捕獲 and 恢復 panic.
       /*注意defer延遲執行的函式可以修改外圍函式“testPanic2Error”的命名返回值.
        *通過呼叫recover捕獲panic並轉化為error. 也許有人打算在main函式中放一個下面這個defer語句,用於捕獲程式中的一切panic異常,
        *建立最後一道防火牆,從而使程式避免崩潰執行下去, 但很不幸, 當main函式的defer延遲函式被執行時,也就意味著main函式要退出了,
        *此時再捕獲panic恢復程式,意義還有多大呢;不過我們有辦法克服, 建立一個像“testPanic2Error”這樣的一個外圍封裝函式,在這個函式中,
        *建立最後一道防火牆,就像此處例子程式碼中所做的一樣, 將panic封閉在自己的包內, 不允許蔓延傳染給其它包, 包與包之間只通過error傳遞
        *結果狀態.
*/
defer func() { if r := recover(); r != nil { fmt.Println("Recovered in testPanic2Error", r) //check exactly what the panic was and create error. switch x := r.(type) { case string: err = errors.
New(x) case error: err = x default: err = errors.New("Unknow panic") } } }() //logic code , panic here. //panic("i am string") //panic(errors.New("i am error"))
panic(-1) return nil } func main() { fmt.Println(testPanic2Error()) fmt.Println("panic restore now, continue.") }
注意: 此文章只是我個人筆記, 如有錯漏,請一定指正, 共同學習, 我的郵箱: [email protected]

相關推薦

go語言捕獲panic異常化為error

package main import ( "fmt" "errors" ) func testPanic2Error() (err error) { //捕獲 and 恢復 panic. /*注意defer延

Go語言聖經-Panic異常,Recover捕獲異常習題

匿名函數 AC 輸出 func 導致 繼續 res 發生 pre Go語言聖經-Panic異常1.當panic異常發生時,程序會中斷運行,並立即執行在該goroutine中被延遲的函數(defer 機制)2.不是所有的panic異常都來自運行時,直接調用內置的panic函數

C/C++語言實現十進位制正整數化為2-16進位制的數輸出

<h3>/<span style="font-size:18px;">/將一個十進位制的正整數轉化為H進位制並輸出--拓展 在此先研究對於正整數的進位制轉換 以及2-16的進位制與十進位制的轉換 #include <IOSTREAM> using namespace s

前端js如何生成一個對象,化為json字符串

cti {} 理解 () min jquery pan i++ 2.0 一,直接上代碼 <script src="../../Content/jquery-2.0.3.min.js" type="text/javascript"></script>

go語言學習--map的

程序 decision 通過 import 結構 link mic imu probably go提供了一種叫map的數據結構,可以翻譯成映射,對應於其他語言的字典、哈希表。借助map,可以定義一個鍵和值,然後可以從map中獲取、設置和刪除這個值,尤其適合數據查找的場景。

go語言學習之異常資訊處理

      // 錯誤處理 package main import( "fmt" "errors" ) var errDivByZero = errors.New("division by zero") func div(dividend, div

go語言模擬網站登入爬蟲

title: go語言模擬網站登入並爬蟲 tags: go,爬蟲 想要學習爬蟲的朋友知道,有時候我們需要爬的網站必須登入,才能獲取到資料,那麼我們該怎麼模擬登入呢? 下面我將使用我的分發平臺作為演示: https://866w.cn 打個小小的

ROS bag包資料的回放,提取任意話題資料,化為txt檔案

一、通過bag檔案記錄話題訊息 當釋出話題的節點執行後,可以通過rostopic list 列出當前執行的話題,然後記錄: mkdir bagfile cd bagfile rosbag record -a #記錄所有的話題 當訊息記錄完成後,結束ctrl+c

python處理gz壓縮檔案,解壓化為json

import requests import gzip import json # gz檔案地址 url='https://shilupan-basic-user-pro.oss-cn-shangha

如何使用ipynb檔案化為py檔案

首先使用 pip install jupyter 安裝jupyter notebook。 在ipynb所在的目錄開啟jupyter notebook ,只需要在終端輸入: jupyter notebook 在瀏覽器開啟的jupyter即可開啟並使用ipynb檔案, File

java反射載入類,化為DataFrame

動態載入類,構造類的例項,並轉化為DataFrame,同時還要解決入表時,類屬性值與表字段一一對應,同時只有部分欄位有值,其他欄位提供根據欄位型別提供預設值 def mergeRDD(spark:S

Robot Framework 按行讀Excel,化為list,同時迴圈化為dict

在介面測試時(Post)需要傳入引數: 但引數較多時,如果每次都建立,那非常不方便,且不靈活,為了便於維護,將輸入引數在Excel中維護,靈活多變: 直入主題: Excel引數如下(由於公司安全考慮,欄位引數都會打碼): 我們的介面傳參有12個引數,個別型別有13個引數

python .dcm文件讀取,化為.jpg格式

plot pip scipy 文件讀取 com 相關信息 python程序 install pre .dcm文件是DICOM(Digital Imaging and Communications in Medicine)即醫學數字成像和通信中記錄醫學圖像和相關信息的文件,在

解析Csv檔案化為DataTable(處理支付寶當面付賬單)

最近在自己做一個小型對賬系統,包括支付寶,微信,銀聯三個內容,因為支付寶當面付賬單提供的介面是提供下載連結,然後下載一個壓縮包,技術還沒有那麼高超,用程式碼解壓,思路是: 1.通過介面,獲取賬單下載連結,通過下面程式碼訪問網頁,然後進行下載檔案。 System.Diagno

java獲取excel中資料,化為JSON格式

java通過poi讀取execl檔案,並且將其中的map格式和陣列格式的字串,轉化為相應的資料型別。 引入poi庫 讀取execl資料,轉化為json字串 將其中的map格式和陣列格式的字串,轉化為相應的資料型別 引入poi庫: <depen

go語言運行錯誤CreateProcess failed with error 216

window 問題 程序 blog system contact tex put img 在運行一個go測試程序是報了一個錯,剛入門郁悶了但是我有百度啊可是搜索結果不想說了,不是說環境有問題就是main方法(也許也會有),試了多次發現測試程序需在文件名後面加_test(Cr

使用 Go 語言開發大型 MMORPG 遊戲服務器怎麽樣?(非常穩定、捕獲所有異常、非常適合從頭開始,但大公司已經有現成的C++框架、所以不會使用)

hive 有效 筆記 序列 優勢 nal 授權 登陸 RR 使用 Go 語言開發大型 MMORPG 遊戲服務器怎麽樣?和C Socket服務器比起來有什麽優劣?可行性怎麽樣? 從2013年起,經朋友推薦開始用Golang編寫遊戲登陸服務器, 配合C++做第三方平臺

Go語言異常處理之errors,panic, recover

package errors func text import type project args normal error接口:源碼 Go語言引入了一個關於錯誤處理的標準模式,即error接口,它是Go語言內建的接口類型,該接口的定義如下: type error inte

go語言中使用defer、panic、recover處理異常

baidu 繼續 spa hello http tid 處理流 dex integer go語言中的異常處理,沒有try...catch等,而是使用defer、panic、recover來處理異常。 1、首先,panic 是用來表示非常嚴重的不可恢復的錯誤的。在Go語

【更多流程控制】2. Go語言異常處理——panic

Go語言異常處理——panic     在上一節,我們已經瞭解到了足夠多的error介面及其周邊的知識。現