全部产品
Search
文档中心

Object Storage Service:Memulai dengan OSS SDK untuk Go

更新时间:Jul 06, 2025

Topik ini menjelaskan cara menggunakan Object Storage Service (OSS) SDK untuk Go dalam melakukan operasi umum. Anda dapat mempelajari cara menginstal OSS SDK untuk Go, mengonfigurasi kredensial akses, serta melakukan operasi dasar seperti membuat bucket dan mengunggah, mengunduh, mencantumkan, serta menghapus objek.

Instal lingkungan kompilasi dan runtime Go

Unduh dan instal lingkungan kompilasi serta runtime Go dengan merujuk ke Menginstal Go dari Sumber. Jalankan perintah berikut untuk memeriksa apakah Go telah terinstal:

go version

Instal OSS SDK untuk Go

Jalankan perintah berikut untuk mendapatkan paket kode:

go get github.com/aliyun/aliyun-oss-go-sdk/oss

Konfigurasikan kredensial akses

Sebelum menggunakan OSS SDK untuk Go, Anda perlu mengonfigurasi kredensial akses. Dalam contoh ini, pasangan AccessKey dari pengguna RAM digunakan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan Kredensial Akses. Untuk informasi lebih lanjut tentang cara mendapatkan pasangan AccessKey dari pengguna RAM, lihat CreateAccessKey.

Jalankan perintah berikut untuk mengonfigurasi kredensial akses menggunakan pasangan AccessKey dari pengguna RAM:

Mac OS X/Linux/Unix

export OSS_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
export OSS_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>

Windows

set OSS_ACCESS_KEY_ID <ALIBABA_CLOUD_ACCESS_KEY_ID>
set OSS_ACCESS_KEY_SECRET <ALIBABA_CLOUD_ACCESS_KEY_SECRET>

Proyek demo

Berikut adalah demo yang menunjukkan cara membuat instance OSSClient, membuat bucket, serta mengunggah, mengunduh, mencantumkan, dan menghapus objek.

  1. Buat file main.go di direktori proyek demo Anda.

    package main
    
    import (
    	"log"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    var client *oss.Client // Tentukan variabel global yang digunakan untuk menyimpan instance OSSClient.
    
    func main() {
    	// Tentukan nama bucket.
    	bucketName := "yourBucketName"
    	// Tentukan endpoint wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. Tentukan endpoint sebenarnya.
    	endpoint := "yourEndpoint"
    
    	// Periksa apakah variabel lingkungan dikonfigurasi.
    	if endpoint == "" || bucketName == "" {
    		log.Fatal("Silakan atur yourEndpoint dan bucketName.")
    	}
    
    	// Dapatkan kredensial akses dari variabel lingkungan.
    	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    	if err != nil {
    		handleError(err)
    	}
    
    	// Buat instance OSSClient.
    	// Tentukan endpoint wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. Tentukan endpoint sebenarnya.
    	// Tentukan wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. Tentukan wilayah sebenarnya.
    	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
    	clientOptions = append(clientOptions, oss.Region("yourRegion"))
    	// Tentukan versi algoritma tanda tangan.
    	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
    	client, err := oss.New(endpoint, "", "", clientOptions...)
    	if err != nil {
    		handleError(err)
    	}
    
    	// Tampilkan informasi klien.
    	log.Printf("Klien: %#v\n", client)
    
    	// Operasi sampel: buat bucket.
    	if err := createBucket(bucketName); err != nil {
    		handleError(err)
    	}
    
    	// Operasi sampel: unggah objek.
    	objectName := "file.txt"
    	localFileName := "/path/to/local/file.txt"
    	if err := uploadFile(bucketName, objectName, localFileName); err != nil {
    		handleError(err)
    	}
    
    	// Operasi sampel: unduh objek.
    	downloadedFileName := "/path/to/downloaded/file.txt"
    	if err := downloadFile(bucketName, objectName, downloadedFileName); err != nil {
    		handleError(err)
    	}
    
    	// Operasi sampel: cantumkan objek.
    	if err := listObjects(bucketName); err != nil {
    		handleError(err)
    	}
    
    	// Operasi sampel: hapus objek.
    	if err := deleteObject(bucketName, objectName); err != nil {
    		handleError(err)
    	}
    }
    
    // Panggil handleError untuk menangani kesalahan yang tidak dapat diperbaiki dan hentikan program setelah mencatat pesan kesalahan.
    func handleError(err error) {
    	log.Fatalf("Kesalahan: %v", err)
    }
    
    // Panggil CreateBucket untuk membuat bucket OSS.
    // Tentukan parameter berikut:
    //
    // bucketName: nama bucket.
    // endpoint: endpoint wilayah tempat bucket berada.
    //
    // Jika bucket dibuat, log akan dihasilkan. Jika tidak, pesan kesalahan akan dikembalikan.
    func createBucket(bucketName string) error {
    	// Buat bucket.
    	err := client.CreateBucket(bucketName)
    	if err != nil {
    		return err
    	}
    
    	// Setelah bucket dibuat, log akan dihasilkan.
    	log.Printf("Bucket berhasil dibuat: %s", bucketName)
    	return nil
    }
    
    // Panggil uploadFile untuk mengunggah file lokal ke bucket OSS.
    // Tentukan parameter berikut:
    //
    // bucketName: nama bucket.
    // objectName: jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap.
    // localFileName: jalur lengkap file lokal.
    // endpoint: endpoint wilayah tempat bucket berada.
    //
    // Jika file lokal diunggah, log akan dihasilkan. Jika tidak, pesan kesalahan akan dikembalikan.
    func uploadFile(bucketName, objectName, localFileName string) error {
    	// Dapatkan informasi bucket.
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		return err
    	}
    
    	// Unggah file lokal.
    	err = bucket.PutObjectFromFile(objectName, localFileName)
    	if err != nil {
    		return err
    	}
    
    	// Setelah file lokal diunggah, log akan dihasilkan.
    	log.Printf("File berhasil diunggah ke %s/%s", bucketName, objectName)
    	return nil
    }
    
    // Panggil downloadFile untuk mengunduh objek dari bucket OSS ke jalur lokal.
    // Tentukan parameter berikut:
    //
    // bucketName: nama bucket.
    // objectName: jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap.
    // downloadedFileName: jalur lengkap file lokal tempat Anda ingin menyimpan objek yang diunduh.
    // endpoint: endpoint wilayah tempat bucket berada.
    //
    // Jika objek diunduh, log akan dihasilkan. Jika tidak, pesan kesalahan akan dikembalikan.
    func downloadFile(bucketName, objectName, downloadedFileName string) error {
    	// Dapatkan informasi bucket.
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		return err
    	}
    
    	// Unduh objek.
    	err = bucket.GetObjectToFile(objectName, downloadedFileName)
    	if err != nil {
    		return err
    	}
    
    	// Setelah objek diunduh, log akan dihasilkan.
    	log.Printf("File berhasil diunduh ke %s", downloadedFileName)
    	return nil
    }
    
    // Panggil listObjects untuk mencantumkan semua objek dalam bucket OSS.
    // Tentukan parameter berikut:
    //
    // bucketName: nama bucket.
    // endpoint: endpoint wilayah tempat bucket berada.
    //
    // Jika objek dicantumkan, semua objek akan ditampilkan. Jika tidak, pesan kesalahan akan dikembalikan.
    func listObjects(bucketName string) error {
    	// Dapatkan informasi bucket.
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		return err
    	}
    
    	// Cantumkan objek.
    	marker := ""
    	for {
    		lsRes, err := bucket.ListObjects(oss.Marker(marker))
    		if err != nil {
    			return err
    		}
    
    		// Tampilkan objek yang terdaftar. Secara default, 100 objek dikembalikan pada satu waktu.
    		for _, object := range lsRes.Objects {
    			log.Printf("Objek: %s", object.Key)
    		}
    
    		if !lsRes.IsTruncated {
    			break
    		}
    		marker = lsRes.NextMarker
    	}
    
    	return nil
    }
    
    // Panggil deleteObject untuk menghapus objek dari bucket OSS.
    // Tentukan parameter berikut:
    //
    // bucketName: nama bucket.
    // objectName: nama objek yang ingin Anda hapus.
    // endpoint: endpoint wilayah tempat bucket berada.
    //
    // Jika objek dihapus, log akan dihasilkan. Jika tidak, pesan kesalahan akan dikembalikan.
    func deleteObject(bucketName, objectName string) error {
    	// Dapatkan informasi bucket.
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		return err
    	}
    
    	// Hapus objek.
    	err = bucket.DeleteObject(objectName)
    	if err != nil {
    		return err
    	}
    
    	// Setelah objek dihapus, log akan dihasilkan.
    	log.Printf("Objek berhasil dihapus: %s/%s", bucketName, objectName)
    	return nil
    }
  2. Ganti bucketName, endpoint, objectName, localFileName, dan downloadedFileName di file main.go dengan nilai sebenarnya sesuai kebutuhan bisnis Anda.

  3. Jalankan perintah berikut:

    go run main.go

Referensi