Instal OSS SDK untuk Go, konfigurasikan kredensial, lalu lakukan operasi dasar: membuat bucket, mengunggah, mengunduh, menampilkan daftar, dan menghapus objek.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Akun Alibaba Cloud dengan Object Storage Service (OSS) yang diaktifkan
Pengguna Resource Access Management (RAM) dengan pasangan AccessKey. Untuk detailnya, lihat CreateAccessKey
Go yang telah diinstal
Verifikasi instalasi Go Anda:
go versionLangkah 1: Instal SDK
Inisialisasi modul Go dan instal OSS SDK untuk Go:
go mod init oss-quickstart
go get github.com/aliyun/aliyun-oss-go-sdk/ossLangkah 2: Konfigurasikan kredensial akses
Tetapkan pasangan AccessKey pengguna RAM Anda sebagai variabel lingkungan.
Jangan pernah menyematkan kredensial AccessKey secara langsung dalam kode sumber. Gunakan variabel lingkungan atau metode aman lainnya untuk menghindari paparan yang tidak disengaja. Untuk opsi kredensial lainnya, lihat Configure access credentials.
macOS/Linux
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>Langkah 3: Jalankan contoh kode
Program ini membuat bucket, mengunggah objek, mengunduhnya, menampilkan daftar objek dalam bucket, lalu menghapus objek tersebut.
Buat file bernama
main.godi direktori proyek Anda:
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
// Klien global yang digunakan bersama di seluruh fungsi pembantu.
var client *oss.Client
func main() {
// Ganti dengan nilai aktual Anda.
bucketName := "yourBucketName"
endpoint := "yourEndpoint" // Contoh: https://oss-cn-hangzhou.aliyuncs.com
region := "yourRegion" // Contoh: cn-hangzhou
// Muat kredensial dari variabel lingkungan.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Error: %v", err)
}
// Buat klien dengan signature AuthV4.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region(region))
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err = oss.New(endpoint, "", "", clientOptions...)
if err != nil {
log.Fatalf("Error: %v", err)
}
log.Printf("Client: %#v\n", client)
// Buat bucket.
if err := createBucket(bucketName); err != nil {
log.Fatalf("Error: %v", err)
}
// Unggah objek.
objectName := "file.txt"
localFileName := "/path/to/local/file.txt"
if err := uploadFile(bucketName, objectName, localFileName); err != nil {
log.Fatalf("Error: %v", err)
}
// Unduh objek.
downloadedFileName := "/path/to/downloaded/file.txt"
if err := downloadFile(bucketName, objectName, downloadedFileName); err != nil {
log.Fatalf("Error: %v", err)
}
// Tampilkan daftar objek dalam bucket.
if err := listObjects(bucketName); err != nil {
log.Fatalf("Error: %v", err)
}
// Hapus objek.
if err := deleteObject(bucketName, objectName); err != nil {
log.Fatalf("Error: %v", err)
}
}
func createBucket(bucketName string) error {
err := client.CreateBucket(bucketName)
if err != nil {
return err
}
log.Printf("Bucket berhasil dibuat: %s", bucketName)
return nil
}
func uploadFile(bucketName, objectName, localFileName string) error {
bucket, err := client.Bucket(bucketName)
if err != nil {
return err
}
err = bucket.PutObjectFromFile(objectName, localFileName)
if err != nil {
return err
}
log.Printf("File berhasil diunggah ke %s/%s", bucketName, objectName)
return nil
}
func downloadFile(bucketName, objectName, downloadedFileName string) error {
bucket, err := client.Bucket(bucketName)
if err != nil {
return err
}
err = bucket.GetObjectToFile(objectName, downloadedFileName)
if err != nil {
return err
}
log.Printf("File berhasil diunduh ke %s", downloadedFileName)
return nil
}
func listObjects(bucketName string) error {
bucket, err := client.Bucket(bucketName)
if err != nil {
return err
}
// ListObjects mengembalikan hingga 100 objek per permintaan secara default.
marker := ""
for {
lsRes, err := bucket.ListObjects(oss.Marker(marker))
if err != nil {
return err
}
for _, object := range lsRes.Objects {
log.Printf("Object: %s", object.Key)
}
if !lsRes.IsTruncated {
break
}
marker = lsRes.NextMarker
}
return nil
}
func deleteObject(bucketName, objectName string) error {
bucket, err := client.Bucket(bucketName)
if err != nil {
return err
}
err = bucket.DeleteObject(objectName)
if err != nil {
return err
}
log.Printf("Objek berhasil dihapus: %s/%s", bucketName, objectName)
return nil
}Ganti nilai placeholder dalam
main.go:Placeholder Deskripsi Contoh yourBucketNameNama bucket OSS Anda my-go-demo-bucketyourEndpointTitik akhir untuk wilayah tempat bucket berada https://oss-cn-hangzhou.aliyuncs.comyourRegionID wilayah tempat bucket berada cn-hangzhou/path/to/local/file.txtPath ke file lokal yang akan diunggah /tmp/file.txt/path/to/downloaded/file.txtPath untuk menyimpan objek yang diunduh /tmp/downloaded-file.txtJalankan program:
go run main.goOutput yang diharapkan:
Client: &oss.Client{...} Bucket berhasil dibuat: my-go-demo-bucket File berhasil diunggah ke my-go-demo-bucket/file.txt File berhasil diunduh ke /tmp/downloaded-file.txt Object: file.txt Objek berhasil dihapus: my-go-demo-bucket/file.txt
Pembersihan
Setelah pengujian selesai, hapus bucket untuk menghindari biaya yang tidak perlu. Hapus bucket melalui Konsol OSS atau dengan menambahkan kode berikut:
err := client.DeleteBucket(bucketName)
if err != nil {
log.Fatalf("Error: %v", err)
}
log.Printf("Bucket dihapus: %s", bucketName)