如何優雅的處理錯誤

2021-08-21 12:55:11 字數 1308 閱讀 3616

1、封裝錯誤error,使其記錄錯誤檔名稱、檔案路徑、行數、操作、錯誤資訊等相關資訊。

//封裝錯誤型別,myerror 型別記錄了檔案,行號,相關的錯誤資訊

type myerror struct

//patherror 除了底層錯誤外還提供了使用哪個檔案,執行哪個操作等相關資訊。

type patherror struct

func (e *myerror) error() string

func (e *patherror) error() string

2、錯誤處理:直接返回,不去判斷具體錯誤。

func fn() error 

// use x

}

3、斷言錯誤,可以對不同錯誤型別進行一些簡單的相對應的處理。

比如一些網路連線超時的錯誤,可以斷言這種錯誤型別,然後**控制重試操作。

4、將錯誤資訊一層一層的往上打,而不是只簡單返回錯誤error

反例:

func authenticaterequest(r *request) error 

return nil

}

錯誤資訊打出去後,仍舊無法定位錯誤的地方。

正例:

func authenticaterequest(r *request) error 

return nil

}

5、給錯誤新增相關資訊,使用包 github.com/pkg/errors,裡面有兩個主要函式,第乙個函式是封裝函式 wrap ,輸入乙個錯誤和乙個資訊,生成乙個新的錯誤返回。第二個函式是 cause ,輸入乙個封裝過的錯誤,解包之後得到原始的錯誤資訊。

使用這兩個函式,我們現在可以給任何錯誤新增相關資訊,並且在我們需要檢視底層錯誤型別的時候可以解包檢視。下面的例子是讀取檔案內容到記憶體的函式。

func readfile(path string) (byte, error) 

defer f.close()

buf, err := ioutil.readall(f)

if err != nil

return buf, nil

}

當發生錯誤時,輸出結果是:

could not read config: open failed: open /users/dfc/.settings.xml: no such file or directory
6、錯誤只處理一次,只在需要作出決定時才處理錯誤,其他時候忽略。

優雅處理段錯誤

摘要 某些程序在結束前必須要處理一些額外的過程才能結束,尤其是資料儲存的模組,程序停止前為保證資料的完整性可能要做一些事情,如果發生段錯誤,這時就需要先截獲se 訊號,處理完後再讓程式出core 一般程序收到段錯誤訊號預設是dump core檔案然後退出,但有些程序在退出時需要處理額外的過程才能結束...

如何優雅的捕獲錯誤

之前的經常會出現這樣的 邏輯 假設這是乙個api介面呼叫 function userinfo code 000 3000 在頁面載入呼叫這個函式 async function getuserinfo catch error async function usecaptured asyncfunc c...

如何優雅的處理Restful

最近公司搭建的專案,前端反映後端返回格式不統一的問題,因此引發小編的思考,如何能夠優雅的處理返回值格式呢?在度娘中仔細研讀了一番,決定總結一下,於是乎此文便誕生了。首先,大家都會思考為什麼要做統一格式處理呢?現階段的開發模式多以前後端分離形式存在,前後端開發人員需要通過大量 api 來進行資料互動,...