在 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())
}