如何比较golang中的错误

时间:2017-12-08 11:02:00

标签: unit-testing go error-handling

上下文: 我正在进行单元测试,并试图检查是否有预期的错误。

我没有预期的结果所以我尝试了一些简单的比较确切的错误,我很惊讶比较返回“假”

e1 := errors.New("error")
e2 := errors.New("error")
fmt.Println(e1 == e2) // false

运行示例:https://play.golang.org/p/cvjjiJT_5T

有人可以解释我为什么会返回false 以及如何正确检查错误之间的相等性?

1 个答案:

答案 0 :(得分:5)

您正在使用相同的错误消息创建两个不同的错误变量。当您将它们与==进行比较时,会得到false因为它们不是相同的变量。

如果您想比较错误消息,请尝试e1.Error() == e2.Error()。但是,比较错误消息仍然不是一个好主意。您可以考虑创建一些错误常量(例如e1 == ErrContentNotFound)或在错误中添加一些ID并对其进行比较(例如e1.ID == ContentNotFoundID)。查看https://dave.cheney.net/2016/04/07/constant-errors(以及该链接中的相关帖子)了解更多详情。