为了账号安全,请及时绑定邮箱和手机立即绑定

比较 Go 中的错误

比较 Go 中的错误

Go
catspeake 2021-12-27 10:47:17
在我的测试文件中,我试图将检测到的实际错误与预期错误进行比较。但是,这种比较评估为假,我不确定为什么。当我创建两个相同的错误并比较它们时,甚至会发生这种情况。代码片段:func TestCompareErrors(t *testing.T) {    if fmt.Errorf("Test Error") != fmt.Errorf("Test Error") {        t.Errorf("Test failed")    }}这导致“测试失败”
查看完整描述

2 回答

?
ibeautiful

TA贡献1993条经验 获得超6个赞

您正在比较两个恰好具有相同错误消息的不同值。您想比较预定义的错误值,就像使用io.EOF.


http://play.golang.org/p/II8ZeASwir


var errTest = fmt.Errorf("test error")


func do() error {

    return errTest

}


func main() {

    err := do()

    if err == errTest {

        log.Fatal("received error: ", err)

    }


}

您可以阅读“错误即价值”以获得更深入的解释。


如果您需要提供有关错误的更多信息,您可以创建自己的错误类型。然后,您可以将任何您想要的信息附加到错误中,并通过类型断言检查该类型的错误。


type myError string


func (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)

    }

}


查看完整回答
反对 回复 2021-12-27
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

使用reflect.DeepEqual比较值。


if reflect.DeepEqual(fmt.Errorf("Test Error"), fmt.Errorf("Test  Error")) {

    // the error values are same.

}

操场上的例子


查看完整回答
反对 回复 2021-12-27
  • 2 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号