主题切换
错误处理
通用的错误处理:
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
}