比较 Go 中的错误

在我的测试文件中,我试图将检测到的实际错误与预期错误进行比较。但是,这种比较评估为假,我不确定为什么。当我创建两个相同的错误并比较它们时,甚至会发生这种情况。


代码片段:


func TestCompareErrors(t *testing.T) {

    if fmt.Errorf("Test Error") != fmt.Errorf("Test Error") {

        t.Errorf("Test failed")

    }

}

这导致“测试失败”


catspeake
浏览 198回答 2
2回答

ibeautiful

您正在比较两个恰好具有相同错误消息的不同值。您想比较预定义的错误值,就像使用io.EOF.http://play.golang.org/p/II8ZeASwirvar errTest = fmt.Errorf("test error")func do() error {    return errTest}func main() {    err := do()    if err == errTest {        log.Fatal("received error: ", err)    }}您可以阅读“错误即价值”以获得更深入的解释。如果您需要提供有关错误的更多信息,您可以创建自己的错误类型。然后,您可以将任何您想要的信息附加到错误中,并通过类型断言检查该类型的错误。type myError stringfunc (e myError) Error() string {    return string(e)}func do() error {    return myError("oops")}func main() {    err := do()    if err, ok := err.(myError); ok {        log.Fatal("received myError: ", err)    }}

ABOUTYOU

使用reflect.DeepEqual比较值。if reflect.DeepEqual(fmt.Errorf("Test Error"), fmt.Errorf("Test  Error")) {    // the error values are same.}操场上的例子
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go