1 回答

TA貢獻1794條經驗 獲得超7個贊
我建議采用以下方式:
package main
import (
"errors"
"fmt"
)
var (
ErrInvalidMsg = errors.New("invalid message")
ErrInvalidParam = errors.New("invalid param")
ErrBadMsg = errors.New("bad message")
)
type GroupError1 struct {
Base error
}
func (ge GroupError1) Error() string {
return ge.Base.Error()
}
type GroupError2 struct {
Base error
}
func (ge GroupError2) Error() string {
return ge.Base.Error()
}
func TheError(n int) error {
switch n % 3 {
case 0:
return GroupError2{
Base: ErrBadMsg,
}
case 1:
return GroupError1{
Base: ErrInvalidParam,
}
case 2:
return GroupError1{
Base: ErrInvalidMsg,
}
}
return nil
}
func main() {
if err := TheError(1); err != nil {
var ge1 GroupError1
var ge2 GroupError2
if ok := errors.As(err, &ge1); ok {
fmt.Println("error group 1")
} else if ok := errors.As(err, &ge2); ok {
fmt.Println("error group 2")
} else {
fmt.Println("no error group")
}
}
}
這里我定義了兩個錯誤組,所以我們可以檢測它們errors.As,你不需要定義任何未使用的接口,但你需要手動創建它們并且沒有任何自動分組。
- 1 回答
- 0 關注
- 93 瀏覽
添加回答
舉報