1 回答

TA貢獻1775條經驗 獲得超8個贊
背后的基本原理是創建錯誤層次結構,其中每個錯誤都有一個父級(或者是層次結構的根)。fmt.Errorf
type errorOne struct{}
func (e errorOne) Error() string {
return "Error One happended"
}
...
e1 := errorOne{}
e2 := fmt.Errorf("E2: %w", e1)
e3 := fmt.Errorf("E3: %w", e2)
您可以使用以下命令檢查一個錯誤是否包裝了另一個錯誤errors.Is
如果你想讓一個錯誤有“多個父項”,那么你可以使用錯誤鏈。它創建一個處理這種情況的自定義類型。ErrorChain
以包 Github 頁面為例
type myError struct {
code int
}
func (e *myError) Error() string {
return fmt.Sprintf("%d", e.code)
}
func (e *myError) Is(target error) bool {
te, ok := target.(*myError)
if ok == false {
return false
}
return e.code == te.code
}
....
ec := chain.New()
ec.Add(errors.New("some error"))
ec.Add(fmt.Errorf("wrap it up %w", &myError{code: 12}))
- 1 回答
- 0 關注
- 105 瀏覽
添加回答
舉報