すべてのプロダクト
Search
ドキュメントセンター

:エラー処理 (Go SDK V1)

最終更新日:Nov 30, 2025

このトピックでは、Go SDK のエラー処理方法について説明します。

クライアント側のエラー

Go SDK による呼び出しが失敗した場合、エラーインターフェイスが返されます。このインターフェイスは、次のように定義されています。

type error interface {
    Error() string
}

他のエラーは、このインターフェイスを継承します。たとえば、HTTP リクエストが失敗したときに返されるエラーは、次のように定義されています。

//net.Error 
type Error interface {
    error
    Timeout() bool   // エラーがタイムアウトであるかどうか
    Temporary() bool // エラーが一時的なものであるかどうか
}

サーバー側のエラー

OSS Go SDK によるリクエストが失敗した場合、エラーが返されます。HTTP リクエストや I/O エラーなどの問題については、カスタム Go エラーが返されます。OSS サーバーでエラーが発生した場合は、次のエラーが返されます。このエラーは Error インターフェイスを実装しています。

type ServiceError struct {
    Code       string    // OSS から返されたエラーコード。
    Message    string    // OSS からの詳細なエラーメッセージ。
    RequestId  string    // リクエストを一意に識別する汎用一意識別子 (UUID)。
    HostId     string    // アクセス先の OSS クラスターの ID。
    StatusCode int       // HTTP ステータスコード。
}

OSS によって返された HTTP ステータスコードが期待されるコードと一致しない場合、次のエラーが返されます。このエラーも Error インターフェイスを実装します。

type UnexpectedStatusCodeError struct {
    allowed []int    // OSS から期待される HTTP ステータスコード。
    got     int      // OSS から実際に返された HTTP ステータスコード。
}

エラー処理の例

次のコードは、エラーを処理する方法を示しています。

package main

import (
	"fmt"
	"os"
	"strings"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

// エラー処理関数。
func HandleError(err error) {
	fmt.Println("Error:", err)
	os.Exit(-1)
}
func main() {
	/// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// OSSClient インスタンスを作成します。
	// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合は、https://oss-cn-hangzhou.aliyuncs.com を使用します。他のリージョンについては、実際のエンドポイントを使用してください。
	// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合は、cn-hangzhou を使用します。他のリージョンについては、実際のリージョン ID を使用してください。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// 署名バージョンを設定します。
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		HandleError(err)
	}
	// バケット名を指定します (例: examplebucket)。
	bucketName := "examplebucket"
	// オブジェクト名を指定します (例: exampleobject.txt)。
	objectName := "exampleobject.txt"

	bucket, err := client.Bucket(bucketName)
	if err != nil {
		HandleError(err)
	}
	// 文字列をアップロードします。
	err = bucket.PutObject(objectName, strings.NewReader("Hello OSS"))
	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

AccessKey ID が存在しません。

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 リクエストの Content-Type が無効です。

400

SignatureDoesNotMatch

署名が無効です。

403

TooManyBuckets

バケット数が上限を超えました。

400

InvalidEncryptionAlgorithmError

指定されたエントロピーエンコーディングの暗号化アルゴリズムが無効です。

400

説明

上記の表では、エラーコード は OssServiceError.Code に対応し、HTTP ステータスコード は OssServiceError.StatusCode に対応します。