在 Go Lang 中处理 Aerospike 库错误
Handling Aerospike library errors in Go Lang
我对 Go Lang 开发还很陌生。最近在用Aerospike Go客户端getObject
err = aer.AeroDB.getObject(nil, key, Record)
if err != nil {
fmt.Println(err)
}
现在上面的错误只暴露了一个方法Error()
,其中returns 一个字符串。我需要以不同的方式处理每种类型的错误。我该怎么做,因为没有返回错误代码。我是否进行字符串匹配以获得相关类型?
解决方案: 下面的回答和评论帮助我找到了准确的答案。我将在这里与其他人分享。 Aerospike 库导出 AerospikeError
结构。现在,错误可能是零或 AerospikeError
struct
。以下代码完成了工作。
import (
"errors"
"fmt"
aerospike "github.com/aerospike/aerospike-client-go"
"github.com/aerospike/aerospike-client-go/types"
)
type ArDB struct {
Host string
Port int
AeroDB *aerospike.Client
}
ArErr, failed := aer.AeroDB.GetObject(nil, key, Record).(types.AerospikeError)
if failed {
if ArErr.ResultCode() == types.KEY_NOT_FOUND_ERROR {
//Key is not present, create new data
Record = NewAudienceRecord()
} else {
//Handle other errors!
}
}
如果函数returns错误实际上是不同类型的,那么你应该使用type switch:
switch err.(type) {
case Error1:
fmt.Println("Error1", err)
case Error2:
fmt.Println("Error2", err)
default:
fmt.Println(err)
}
但是如果错误属于同一类型,那么您必须查看包是否将一些 "common errors" 导出为变量,以便您可以检查这些:
if err == aer.Error1 {
// do something specific to Error1
}
这里是 Aerospike Go 客户端开发人员。根据我的经验,下面显示的简洁条件类型转换更具可读性,尽管与您自己的相同:
if ae, ok := err.(AerospikeError); ok {
println(ae.ResultCode())
}
我对 Go Lang 开发还很陌生。最近在用Aerospike Go客户端getObject
err = aer.AeroDB.getObject(nil, key, Record)
if err != nil {
fmt.Println(err)
}
现在上面的错误只暴露了一个方法Error()
,其中returns 一个字符串。我需要以不同的方式处理每种类型的错误。我该怎么做,因为没有返回错误代码。我是否进行字符串匹配以获得相关类型?
解决方案: 下面的回答和评论帮助我找到了准确的答案。我将在这里与其他人分享。 Aerospike 库导出 AerospikeError
结构。现在,错误可能是零或 AerospikeError
struct
。以下代码完成了工作。
import (
"errors"
"fmt"
aerospike "github.com/aerospike/aerospike-client-go"
"github.com/aerospike/aerospike-client-go/types"
)
type ArDB struct {
Host string
Port int
AeroDB *aerospike.Client
}
ArErr, failed := aer.AeroDB.GetObject(nil, key, Record).(types.AerospikeError)
if failed {
if ArErr.ResultCode() == types.KEY_NOT_FOUND_ERROR {
//Key is not present, create new data
Record = NewAudienceRecord()
} else {
//Handle other errors!
}
}
如果函数returns错误实际上是不同类型的,那么你应该使用type switch:
switch err.(type) {
case Error1:
fmt.Println("Error1", err)
case Error2:
fmt.Println("Error2", err)
default:
fmt.Println(err)
}
但是如果错误属于同一类型,那么您必须查看包是否将一些 "common errors" 导出为变量,以便您可以检查这些:
if err == aer.Error1 {
// do something specific to Error1
}
这里是 Aerospike Go 客户端开发人员。根据我的经验,下面显示的简洁条件类型转换更具可读性,尽管与您自己的相同:
if ae, ok := err.(AerospikeError); ok {
println(ae.ResultCode())
}