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 关注
- 71 浏览
添加回答
举报