Skip to content

错误处理

通用的错误处理:

S3有一个通用的错误处理类:awserr.Error,通过了以下方法获取出错信息:

方法说明
Code返回用于对相关错误进行分组的分类代码
Message返回错误的描述
OrigError返回由awserr包装的error类型的原始错误。错误接口,例如标准库错误或服务错误

awserr.Error的定义如下:

go
type Error interface {
    // Satisfy the generic error interface.
    error

    // Returns the short phrase depicting the classification of the error.
    Code() string

    // Returns the error details message.
    Message() string

    // Returns the original error if one was set.  Nil is returned if not set.
    OrigErr() error
}

处理特殊的出错

go
svc := s3.New(sess)
resp, err := svc.GetObject(&s3.GetObjectInput{
    Bucket: aws.String(os.Args[1]),
    Key:    aws.String(os.Args[2]),
})

if err != nil {
    // http://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html
    if aerr, ok := err.(awserr.Error); ok {
        switch aerr.Code() {
        case s3.ErrCodeNoSuchBucket:
            exitErrorf("bucket %s does not exist", os.Args[1])
        case s3.ErrCodeNoSuchKey:
            exitErrorf("object with key %s does not exist in bucket %s", os.Args[2], os.Args[1])
        }
    }
}
错误码描述
ErrCodeNoSuchBucket桶不存在
ErrCodeNoSuchKey对象不存在
ErrCodeBucketAlreadyExists桶已经被创建了,不属于您
ErrCodeBucketAlreadyOwnedByYou桶已经被创建了,且是您创建的
ErrCodeNoSuchUpload分块上传不存在

特殊的错误接口:MultiUploadFailure

接口定义如下:

go
type MultiUploadFailure interface {
    awserr.Error

    // Returns the upload id for the S3 multipart upload that failed.
    UploadID() string
}