クライアントエラー

Go SDK の呼び出しエラーは、統合エラーインターフェイスを通して返されます。 エラーインターフェイスは次のように定義されています。

type error interface {
    Error() string
}

他のエラーもこのエラーインタフェイスを通して返されます。 たとえば、HTTP リクエストエラーは次のように返されます。

//net.Error 
type Error interface {
    error
    Timeout() bool   // Is the error a timeout
    Temporary() bool // Is the error temporary
}

サーバーエラー

OSS Go SDK の使用時にリクエストエラーが発生した場合は、対応するエラーが返されます。 HTTP リクエストエラーおよび I / O エラーの場合は、Go で事前設定されたエラーが返されます。 OSS サーバーのリクエスト処理エラーの場合、エラーインターフェイスを通して次のエラーが返されます。

type ServiceError struct {
    Code       string    // Error code returned by OSS to a user
    Message    string    // Error details provided by OSS
    RequestId  string    // UUID that uniquely identifies the request
    HostId     string    // OSS cluster that identifies the access
    StatusCode int       // HTTP status code
}

OSS から返された HTTP ステータスコードが予想されたものと一致しない場合、同様にエラーインタフェイスを通して次のエラーが返されます。

type UnexpectedStatusCodeError struct {
    allowed []int    // Expected HTTP status code returned by OSS
    got     int      // Actual HTTP status code returned by OSS
}

エラー処理の例

次のコードはエラー処理を説明するために使用されます。

package main
import (
    "fmt"
    "os"
    "strings"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
)
// Error handling function
func HandleError(err error) {
    fmt.Println("Error:", err)
    os.Exit(-1)
}
func main() {
    // Create an OSSClient instance.
    client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
    if err ! = nil {
        HandleError(err)
    }
    bucketName := "<yourBucketName>"
    objectName := "<yourObjectName>"
    // Obtain the bucket.
    bucket, err := client.Bucket(bucketName)
    if err ! = nil {
        HandleError(err)
    }
    // Simple upload: string upload
    err = bucket.PutObject(objectName, strings.NewReader("yourObjectValueContentString"))
    if err ! = nil {
        HandleError(err)
}

OSS エラーコード

次の表に OSS のエラーコードを示します。

エラーコード 説明 HTTP ステータスコード
AccessDenied アクセス拒否 403
BucketAlreadyExists バケットが既に存在します。 409
BucketNotEmpty バケットが空ではありません。 409
EntityTooLarge エンティティが大きすぎます。 400
EntityTooSmall エンティティが小さすぎます。 400
FileGroupTooLarge オブジェクトグループが大きすぎます。 400
InvalidLinkName オブジェクトリンクの名前は、リンクされたオブジェクトと同じです。 400
LinkPartNotExist オブジェクトリンクがリンクされているオブジェクトが存在しません。 400
ObjectLinkTooLarge オブジェクトリンクに含まれるオブジェクトが多すぎます。 400
FieldItemTooLong POST リクエストのテーブルフィールドが大きすぎます。 400
FilePartInterity オブジェクトのパーツが変更されました。 400
FilePartNotExist オブジェクトのパーツが存在しません。 400
FilePartStale オブジェクトパーツは期限切れです。 400
IncorrectNumberOfFilesInPOSTRequest POST リクエスト内のオブジェクトの数が正しくありません。 400
InvalidArgument パラメーターの形式が無効です。 400
InvalidAccessKeyId AccessKeyID は存在しません。 403
InvalidBucketName バケット名が無効です。 400
InvalidDigest ダイジェストは無効です。 400
InvalidEncryptionAlgorithmError 指定されたエントロピー暗号化アルゴリズムは無効です。 400
InvalidObjectName オブジェクト名が無効です。 400
InvalidPart そのパーツは無効です。 400
InvalidPartOrder パーツオーダーが無効です。 400
InvalidPolicyDocument ポリシー文書が無効です。 400
InvalidTargetBucketForLogging ログ記録用のターゲットバケットが無効です。 400
InternalError OSS でエラーが発生しました。 500
MalformedXML XML 形式が無効です。 400
MalformedPOSTRequest POST リクエストの本文の形式が無効です。 400
MaxPOSTPreDataLengthExceededError POST リクエストでアップロードされたオブジェクトのコンテンツを除く本文が大きすぎます。 400
MethodNotAllowed メソッドがサポートされていません。 405
MissingArgument パラメータがありません。 411
MissingContentLength コンテンツ長がありません。 411
NoSuchBucket バケットが存在しません。 404
NoSuchKey オブジェクトが存在しません。 404
NoSuchUpload マルチパートアップロード ID が存在しません。 404
NotImplemented メソッドが実装できません。 501
PreconditionFailed 事前条件が失敗しました。 412
RequestTimeTooSkewed クライアントの現地時間と OSS サーバー時間は 15 分以上異なります。 403
RequestTimeout リクエストはタイムアウトしました。 400
RequestIsNotMultiPartContent POST リクエストのコンテンツタイプが無効です。 400
SignatureDoesNotMatch 署名が正しくありません。 403
TooManyBuckets ユーザーのバケット数が制限を超過しています。 400
InvalidEncryptionAlgorithmError 指定されたエントロピー暗号化アルゴリズムは無効です。 400
上記表内で、 エラーコードは OssServiceError.Code、 HTTP ステータスコードは OssServiceError.StatusCode です。