错误处理

基本用法

对于 SDK 抛出的错误,最典型的用法是直接序列化为字符串打印出来:

snippet.go
if err != nil {
    fmt.Printf("got error: %s", err)
}

对于 API 返回 RetCode 大于 0 的错误,可以通过以下方法简单地判断出来:

snippet.go
if uerr.IsCodeError(err) {
    fmt.Printf("%v %s", e.Code(), e.Message())
} else {
    fmt.Printf("%s", e)
}

高阶用法

如果需要对于 SDK 错误有更细粒度的要求,可以是有类型推导来检查错误,例如:

snippet.go
import (
    uerr "github.com/ucloud/ucloud-sdk-go/ucloud/error"
)
 
if err != nil {
    switch err.(type) {
    case uerr.(ClientError):
        fmt.Printf("client error: %s", err)
    case uerr.(ServerError):
        fmt.Printf("server error: %s", err)
    }
}

或者直接枚举错误的名称来分别处理:

snippet.go
import (
    uerr "github.com/ucloud/ucloud-sdk-go/ucloud/error"
)
 
if e, ok := err.(uerr.Error); err != nil && ok {
    switch e.Name() {
    case uerr.ErrRetCode:
        fmt.Printf("%v %s", e.Code(), e.Message())
    default:
        fmt.Printf("%s", e)
    }
}