我遇到了如下问题:编写单元测试时比较2个错误
package main
import (
"errors"
"fmt"
"reflect"
"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
)
func main() {
er1 := errors.New("database name is not exists")
er2 := errors.New("database name is not exists")
result1 := reflect.DeepEqual(er1, er2)
fmt.Println("reflect: ", result1)
result2 := cmp.Equal(er1, er2, cmpopts.EquateErrors())
fmt.Println("compare: ", result2)
result3 := errors.Is(er1, er2)
fmt.Println("errorIs: ", result3)
}
以上代码的输出是:
reflect: true
compare: false
errorIs: false
我想比较2错误,这是我应用的第一种方法,这种方法产生我想要的输出,但这种方法有一个警告:reflect.DeepEqual(er1, er2)go lint
avoid using reflect.DeepEqual with errorsdeepequalerrors
在谷歌搜索之后,有些人告诉我一些方法:
使用 cmp 包比较:cmp.Equal(er1, er2, cmpopts.EquateErrors())
使用错误包进行比较:errors.Is(er1, er2)
但上述两种方法都不能产生与第一种方法相同的结果(使用反射。深度等式)。我如何在没有警告的情况下比较2个错误并产生像Tks一样的结果go lint
reflect.DeepEqual
偶然的你
qq_遁去的一_1
相关分类