Closed lingcoder closed 5 months ago
error.is
对应的应该是 gerror.Equal
Bot detected the issue body's language is not English, translate it automatically. 👯👭🏻🧑🤝🧑👫🧑🏿🤝🧑🏻👩🏾🤝👨🏿👬🏿
error.is
should correspond togerror.Equal
err1 := errors.New("permission denied")
fmt.Println(gerror.Is(err1, err1))// false
fmt.Println(gerror.Is(gerror.Wrap(err1, ""), err1))// 这样套一套能返回true,但有点多此一举
func Is(err, target error) bool {
if e, ok := err.(IIs); ok {
return e.Is(target)
}
return false // 这里不应该直接返回
}
err1 := errors.New("permission denied") fmt.Println(gerror.Is(err1, err1))// false fmt.Println(gerror.Is(gerror.Wrap(err1, ""), err1))// 这样套一套能返回true,但有点多此一举 func Is(err, target error) bool { if e, ok := err.(IIs); ok { return e.Is(target) } return false // 这里不应该直接返回 }
对的,同一个错误,Is都返回false,挺反直觉的
Go version
go version go1.22.3 windows/amd64
GoFrame version
2.7.1
Can this bug be reproduced with the latest release?
Option Yes
What did you do?
这是gerror的源码部分: func Is(err, target error) bool { if e, ok := err.(IIs); ok { return e.Is(target) } return false } 由于标准库错误没有实现IIs接口,导致这里的判断直接变成false了。 参考下面的标准库的错误包 与 github.com/pkg/errors包的 判断对比。
What did you see happen?
我预期与标准库的errors.Is判断结果一致
What did you expect to see?
结果相反
这是复现示例代码: