英文:
Compare error message in golang
问题
假设我在 Golang 中创建了一个新的错误,如下所示:
err := errors.New("SOME_COMMON_ERROR_CODE")
在 Java 中,我习惯于通过 GetMessage()
方法获取异常消息。如果返回的是错误,我该如何进行比较呢?
if some_err := some_package.DoSomething(); some_err != nil {
if some_err.Error() == "SOME_COMMON_ERROR_CODE" {
// 处理错误
}
}
在 Golang 中,错误类型实现了 error
接口,其中包含一个 Error()
方法,用于返回错误的字符串表示。因此,你可以使用 Error()
方法获取错误的字符串表示,并将其与预期的错误代码进行比较。
英文:
Let's say I create a new error in golang like so
err := errors.New("SOME_COMMON_ERROR_CODE")
In java, I'm used to being able to get Exception with GetMessage()
messages. How would I compare that error if returned?
if some_err := some_package.DoSomething(); some_err != nil {
if some_err.GetMessage() == "SOME_COMMON_ERROR_CODE" {
// handle it however.
}
}
How is this done in golang?
答案1
得分: 12
声明一个包级别的变量来表示错误:
var errExample = errors.New("this is an example")
在返回错误时使用这个值。通过与这个值进行比较,检查特定的错误:
if err == errExample {
// 处理错误
}
如果包外的代码需要访问这个错误,将变量导出:
var ErrExample = errors.New("this is an example")
使用方法如下:
if err == somepackage.ErrExample {
// 处理错误
}
避免与错误的 Error() 方法返回的字符串进行比较。这可能会使你的代码变得脆弱。
英文:
Declare a package level variable with the error:
var errExample = errors.New("this is an example")
Use this value when returning errors. Compare against this value to check for the specific error:
if err == errExample {
// handle it
}
Export the variable if code outside the package needs to access the error:
var ErrExample = errors.New("this is an example")
Use it like this:
if err == somepackage.ErrExample {
// handle it
}
Avoid comparing against the string returned from the error's Error() method. It can make your code brittle.
答案2
得分: 9
我们也可以这样比较错误:
- 如果你创建了这样的错误 [基于错误代码]
_
var errExample = errors.New("ERROR_CODE")
那么你可以直接这样检查错误:
if err.Error() == "ERROR_CODE" {
// 做一些错误处理
}
- 如果你创建了这样的错误 [基于错误代码]
package mypackage
var NoMoreData = errors.New("没有更多数据")
现在你可以在任何地方这样检查:
if err != mypackage.NoMoreData{
// 做一些错误处理
}
如果你想同时比较两个错误,可以这样做:
err1 := errors.New("捕获到错误")
err2 := errors.New("捕获到错误")
fmt.Println(err1 == err2) // false | 不要这样做
fmt.Println(err1.Error() == err2.Error()) // true | 这样做
就是这样。
英文:
we can also compare errors like that:
- If you creating error like this [Error Code Based]
_
var errExample = errors.New("ERROR_CODE")
then you can directly check error like this
if err.Error() == "ERROR_CODE" {
//Do something error caught
}
- If you creating error like this [Error Code Based]
package mypackage
var NoMoreData = errors.New("No more data")
Now you can check anywhere like this
if err != mypackage.NoMoreData{
//Do something error caught
}
If you want to compare two errors at a time then you can do like this:
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
That's All.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论