【发布时间】:2016-07-19 08:30:22
【问题描述】:
我对 Go Lang 开发还很陌生。最近我在使用 Aerospike Go 客户端来获取对象
err = aer.AeroDB.getObject(nil, key, Record)
if err != nil {
fmt.Println(err)
}
现在上面的错误只暴露了一个方法Error(),它返回一个字符串。我需要以不同的方式处理每种类型的错误。我该怎么做,因为没有返回错误代码。我是否进行字符串匹配以获得相关类型?
解决方案: 下面的答案和 cmets 帮助我找到了准确的答案。我将在这里与其他人分享。 Aerospike 库导出 AerospikeError 结构。现在,error 可能是 nil 或 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!
}
}
【问题讨论】:
-
@icza 所以基本上我必须依赖 API 提供者为错误处理提供的结构类型。如果他们没有提供任何可理解的错误错误(在这种情况下)我有什么选择?
标签: go error-handling aerospike