All Products
Search
Document Center

:Penanganan error (Go SDK V1)

Last Updated:Nov 30, 2025

Topik ini menjelaskan cara menangani error pada Go SDK.

Kesalahan di sisi klien

Jika panggilan yang dilakukan oleh Go SDK gagal, SDK tersebut mengembalikan antarmuka error yang didefinisikan sebagai berikut:

type error interface {
    Error() string
}

Error lainnya mewarisi antarmuka ini. Sebagai contoh, error yang dikembalikan ketika permintaan HTTP gagal didefinisikan sebagai berikut:

//net.Error 
type Error interface {
    error
    Timeout() bool   // Apakah kesalahan merupakan timeout
    Temporary() bool // Apakah kesalahan bersifat sementara
}

Kesalahan di sisi server

Jika permintaan yang dilakukan oleh OSS Go SDK gagal, sebuah error dikembalikan. Untuk masalah seperti error permintaan HTTP atau I/O, error kustom Go dikembalikan. Jika terjadi error pada server OSS, error berikut dikembalikan dan mengimplementasikan antarmuka Error:

type ServiceError struct {
    Code       string    // Kode error yang dikembalikan oleh OSS.
    Message    string    // Pesan error detail dari OSS.
    RequestId  string    // Pengidentifikasi unik universal (UUID) yang secara unik mengidentifikasi permintaan.
    HostId     string    // ID kluster OSS yang diakses.
    StatusCode int       // Kode status HTTP.
}

Jika kode status HTTP yang dikembalikan oleh OSS tidak sesuai dengan yang diharapkan, kesalahan berikut dikembalikan. Kesalahan ini juga mengimplementasikan antarmuka Error.

type UnexpectedStatusCodeError struct {
    allowed []int    // Kode status HTTP yang diharapkan dari OSS.
    got     int      // Kode status HTTP aktual yang dikembalikan oleh OSS.
}

Contoh penanganan kesalahan

Berikut adalah kode yang menunjukkan cara menangani kesalahan:

package main

import (
	"fmt"
	"os"
	"strings"

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

// Fungsi penanganan error.
func HandleError(err error) {
	fmt.Println("Error:", err)
	os.Exit(-1)
}
func main() {
	/// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke titik akhir bucket. Misalnya, untuk wilayah China (Hangzhou), gunakan https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan titik akhir yang sebenarnya.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), gunakan cn-hangzhou. Untuk wilayah lain, gunakan ID wilayah yang sebenarnya.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		HandleError(err)
	}
	// Tentukan nama bucket, misalnya examplebucket.
	bucketName := "examplebucket"
	// Tentukan nama objek, misalnya exampleobject.txt.
	objectName := "exampleobject.txt"

	bucket, err := client.Bucket(bucketName)
	if err != nil {
		HandleError(err)
	}
	// Unggah string.
	err = bucket.PutObject(objectName, strings.NewReader("Hello OSS"))
	if err != nil {
		HandleError(err)
	}
}

Kode kesalahan OSS

Tabel berikut mencantumkan kode kesalahan OSS.

Kode kesalahan

Deskripsi

Kode status HTTP

AccessDenied

Akses ditolak.

403

BucketAlreadyExists

Bucket sudah ada.

409

BucketNotEmpty

Bucket tidak kosong.

409

EntityTooLarge

Entitas terlalu besar.

400

EntityTooSmall

Entitas terlalu kecil.

400

FileGroupTooLarge

Grup file terlalu besar.

400

InvalidLinkName

Tautan objek memiliki nama yang sama dengan objek yang ditunjuknya.

400

LinkPartNotExist

Objek yang ditunjuk oleh tautan objek tidak ada.

400

ObjectLinkTooLarge

Jumlah objek dalam tautan objek terlalu besar.

400

FieldItemTooLong

Bidang formulir dalam permintaan POST terlalu besar.

400

FilePartInterity

Bagian file telah berubah.

400

FilePartNotExist

Bagian file tidak ada.

400

FilePartStale

Bagian file sudah usang.

400

IncorrectNumberOfFilesInPOSTRequest

Jumlah file dalam permintaan POST tidak valid.

400

InvalidArgument

Format parameter tidak valid.

400

InvalidAccessKeyId

ID AccessKey tidak ada.

403

InvalidBucketName

Nama bucket tidak valid.

400

InvalidDigest

Digest tidak valid.

400

InvalidEncryptionAlgorithmError

Algoritma enkripsi yang ditentukan untuk entropy encoding tidak valid.

400

InvalidObjectName

Nama objek tidak valid.

400

InvalidPart

Bagian tidak valid.

400

InvalidPartOrder

Urutan bagian tidak valid.

400

InvalidPolicyDocument

Dokumen kebijakan tidak valid.

400

InvalidTargetBucketForLogging

Bucket target untuk operasi logging tidak valid.

400

InternalError

Kesalahan internal terjadi di OSS.

500

MalformedXML

Format XML tidak valid.

400

MalformedPOSTRequest

Format body dari permintaan POST tidak valid.

400

MaxPOSTPreDataLengthExceededError

Isi permintaan POST, tidak termasuk konten file yang diunggah, terlalu besar.

400

MethodNotAllowed

Metode tidak didukung.

405

MissingArgument

Parameter hilang.

411

MissingContentLength

Panjang konten hilang.

411

NoSuchBucket

Bucket tidak ada.

404

NoSuchKey

File tidak ada.

404

NoSuchUpload

ID unggah multi-bagian tidak ada.

404

NotImplemented

Metode tidak dapat diproses.

501

PreconditionFailed

Kesalahan pra-pemrosesan terjadi.

412

RequestTimeTooSkewed

Selisih waktu antara klien dan server OSS lebih dari 15 menit.

403

RequestTimeout

Permintaan habis waktu.

400

RequestIsNotMultiPartContent

Content-Type dari permintaan POST tidak valid.

400

SignatureDoesNotMatch

Signature tidak valid.

403

TooManyBuckets

Jumlah bucket telah melebihi batas.

400

InvalidEncryptionAlgorithmError

Algoritma enkripsi entropy encoding yang ditentukan tidak valid.

400

Catatan

Pada tabel di atas, Error code berkorespondensi dengan OssServiceError.Code, dan HTTP status code berkorespondensi dengan OssServiceError.StatusCode.