You need to enable JavaScript to run this app.
导航
异常处理(Go SDK)
最近更新时间:2024.02.04 18:30:54首次发布时间:2021.12.31 17:38:36

本文介绍使用 TOS SDK 时的异常处理。

TOS 服务端错误

TOS 服务端遵循 HTTP 规范,对于请求失败的场景定义了详细的 HTTP 状态码和业务错误码。详细内容,请参见TOS 服务端状态码和错误码定义

SDK 自定义错误

客户端错误 - TosClientError

TosClientError 是客户端输入参数有误、连接超时或客户端执行取消断点续传上传等特殊操作引起的。例如使用 CreateBucketV2 创建桶时,如果桶名字符长度大于 63 个字符则抛出异常。

服务端错误 - TosServerError

通过 TOS Go SDK 接口向 TOS 服务端发送请求,请求响应中会包含遵循 HTTP 规范的状态码和业务错误码,用于标识当前请求的响应状态。

错误处理示例

以下代码展示了下载一个不存在的对象时的异常处理,若为 TosServerError 异常则打印异常信息、HTTP 请求状态码、请求 ID;若为 TosClientError 异常则打印异常信息与引起错误的原因。

package main

import (
   "context"
   "fmt"
   "net/http"

   "github.com/volcengine/ve-tos-golang-sdk/v2/tos"
)

func checkErr(err error) {
   if err != nil {
      panic(err)
   }
}

func main() {
   var (
      accessKey = os.Getenv("TOS_ACCESS_KEY")
      secretKey = os.Getenv("TOS_SECRET_KEY")
      endpoint   = "your endpoint"
      region     = "your region"
      bucketName = "your bucket name"
      objectKey  = "your object key"
   )
   client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey)))
   checkErr(err)
   get, err := client.GetObjectV2(context.Background(), &tos.GetObjectV2Input{
      Bucket: bucketName,
      Key:    objectKey,
   })
   if err != nil {
      switch terr := err.(type) {
      case *tos.TosServerError:
         fmt.Printf("Message:%s StatusCode:%d RequestID:%s", terr.Message, terr.StatusCode, terr.RequestID)
         if terr.StatusCode == http.StatusNotFound {
            return
         }
      case *tos.TosClientError:
         fmt.Printf("Message:%s Cause:%v", terr.Message, terr.Cause)

      }
   }
   fmt.Println("GetObjectV2 Request ID:", get.RequestID)

}