All Products
Search
Document Center

Object Storage Service:Memulai dengan OSS SDK untuk Go

Last Updated:Feb 28, 2026

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 version

Langkah 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/oss

Langkah 2: Konfigurasikan kredensial akses

Tetapkan pasangan AccessKey pengguna RAM Anda sebagai variabel lingkungan.

Penting

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.

  1. Buat file bernama main.go di 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
}
  1. Ganti nilai placeholder dalam main.go:

    PlaceholderDeskripsiContoh
    yourBucketNameNama bucket OSS Andamy-go-demo-bucket
    yourEndpointTitik akhir untuk wilayah tempat bucket beradahttps://oss-cn-hangzhou.aliyuncs.com
    yourRegionID wilayah tempat bucket beradacn-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.txt
  2. Jalankan program:

    go run main.go

    Output 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)
Catatan Bucket harus dalam keadaan kosong sebelum dihapus. Pastikan semua objek dan unggah multi-bagian yang belum lengkap telah dihapus terlebih dahulu.

Referensi