假设我在golang中创建了一个新的错误
err := errors.New("SOME_COMMON_ERROR_CODE")
在java中,我习惯于能够使用GetMessage()
消息获取异常。如果返回,我该如何比较该错误?
if some_err := some_package.DoSomething(); some_err != nil {
if some_err.GetMessage() == "SOME_COMMON_ERROR_CODE" {
// handle it however.
}
}
这是如何在golang中完成的?
答案 0 :(得分:5)
使用错误声明包级别变量:
var errExample = errors.New("this is an example")
返回错误时使用此值。与此值进行比较以检查特定错误:
if err == errExample {
// handle it
}
如果包外的代码需要访问错误,则导出变量:
var ErrExample = errors.New("this is an example")
像这样使用:
if err == somepackage.ErrExample {
// handle it
}
避免与错误的Error()方法返回的字符串进行比较。它可以使你的代码变脆。
答案 1 :(得分:2)
我们还可以比较类似的错误:
_
var errExample = errors.New("ERROR_CODE")
然后您可以像这样直接检查错误
if err.Error() == "ERROR_CODE" {
//Do something error caught
}
打包mypackage
var NoMoreData = errors.New("No more data")
现在您可以在任何地方进行检查
if err != mypackage.NoMoreData{
//Do something error caught
}
如果您想一次比较两个错误,则可以这样做:
err1 := errors.New("Error Caught")
err2 := errors.New("Error Caught")
fmt.Println(err1 == err2) // false | Never do like this
fmt.Println(err1.Error() == err2.Error()) // true | Do like this
仅此而已。