比较golang中的错误消息

1N5*_*818 4 error-handling go

假设我在golang中创建了一个新错误

err := errors.New("SOME_COMMON_ERROR_CODE")
Run Code Online (Sandbox Code Playgroud)

在java中,我习惯于能够通过GetMessage()消息获得Exception .如果返回,我该如何比较该错误?

if some_err := some_package.DoSomething(); some_err != nil {
    if some_err.GetMessage() == "SOME_COMMON_ERROR_CODE" {
        // handle it however.
    }
}
Run Code Online (Sandbox Code Playgroud)

这是怎么在golang完成的?

amk*_*u91 10

我们还可以比较这样的错误:

  1. 如果您创建这样的错误[基于错误代码]

_

var errExample = errors.New("ERROR_CODE")
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样直接检查错误

if err.Error() == "ERROR_CODE" {
//Do something error caught
}
Run Code Online (Sandbox Code Playgroud)
  1. 如果您创建这样的错误[基于错误代码]

打包我的包

var NoMoreData = errors.New("No more data")
Run Code Online (Sandbox Code Playgroud)

现在你可以像这样检查任何地方

if err != mypackage.NoMoreData{
//Do something error caught
}
Run Code Online (Sandbox Code Playgroud)

如果你想一次比较两个错误,那么你可以这样做:

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
Run Code Online (Sandbox Code Playgroud)

就这样。


Cer*_*món 7

使用错误声明包级别变量:

var errExample = errors.New("this is an example")
Run Code Online (Sandbox Code Playgroud)

返回错误时使用此值.与此值进行比较以检查特定错误:

if err == errExample {
    // handle it
}
Run Code Online (Sandbox Code Playgroud)

如果包外的代码需要访问错误,则导出变量:

var ErrExample = errors.New("this is an example")
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

if err == somepackage.ErrExample {
    // handle it
}
Run Code Online (Sandbox Code Playgroud)

这是一些例子.

避免与错误的Error()方法返回的字符串进行比较.它可以使你的代码变脆.