All Products
Search
Document Center

Object Storage Service:Setel penandaan objek (Go SDK V1)

Last Updated:Nov 29, 2025

OSS mendukung object tagging untuk mengklasifikasikan objek dalam bucket. Anda dapat menetapkan aturan siklus hidup dan izin akses untuk objek yang memiliki tag yang sama.

Catatan penggunaan

  • Topik ini menggunakan public endpoint wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama dengan OSS, gunakan internal endpoint. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Regions and endpoints.

  • Kredensial akses pada topik ini diperoleh dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Configure access credentials.

  • Instans OSSClient pada topik ini dibuat menggunakan endpoint OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Configure a client (Go SDK V1).

  • Untuk menyetel penandaan objek, Anda harus memiliki izin oss:PutObjectTagging. Untuk informasi selengkapnya, lihat Grant custom access policies to RAM users.

Tambahkan penandaan objek saat unggah

  • Tambahkan penandaan objek saat simple upload

    Kode berikut menunjukkan cara menambahkan penandaan objek saat simple upload.

    package main
    
    import (
    	"fmt"
    	"os"
    	"strings"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    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 Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, tentukan Endpoint yang sebenarnya.
    	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, tentukan 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 {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Tentukan nama bucket. Misalnya, examplebucket.
    	bucketName := "examplebucket"
    	// Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt.
    	objectName := "exampledir/exampleobject.txt"
    
    	// Dapatkan bucket.
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Tentukan kunci dan nilai untuk setiap tag objek. Misalnya, setel kunci ke owner dan nilai ke John.
    	tag1 := oss.Tag{
    		Key:   "owner",
    		Value: "John",
    	}
    	tag2 := oss.Tag{
    		Key:   "type",
    		Value: "document",
    	}
    	tagging := oss.Tagging{
    		Tags: []oss.Tag{tag1, tag2},
    	}
    
    	// Setel penandaan objek.
    	err = bucket.PutObject(objectName, strings.NewReader("Hello OSS"), oss.SetTagging(tagging))
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	fmt.Println(bucket.GetObjectTagging(objectName))
    }
    
  • Tambahkan penandaan objek saat multipart upload

    Kode berikut menunjukkan cara menambahkan penandaan objek saat melakukan multipart upload file lokal.

    package main
    
    import (
    	"fmt"
    	"os"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    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 Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, tentukan Endpoint yang sebenarnya.
    	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, tentukan 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 {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Tentukan nama bucket. Misalnya, examplebucket.
    	bucketName := "examplebucket"
    	// Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt.
    	objectName := "exampledir/exampleobject.txt"
    	// Tentukan path lengkap file lokal. Misalnya, D:\\localpath\\examplefile.txt.
    	// Jika Anda hanya menentukan nama file, seperti examplefile.txt, file tersebut akan diunggah dari path lokal proyek yang berisi program contoh.
    	fileName := "D:\\localpath\\examplefile.txt"
    
    	// Dapatkan bucket.
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Tentukan kunci dan nilai untuk setiap tag objek. Misalnya, setel kunci ke owner dan nilai ke John.
    	tag1 := oss.Tag{
    		Key:   "owner",
    		Value: "John",
    	}
    	tag2 := oss.Tag{
    		Key:   "type",
    		Value: "document",
    	}
    	tagging := oss.Tagging{
    		Tags: []oss.Tag{tag1, tag2},
    	}
    
    	// Pisahkan file menjadi tiga bagian untuk diunggah. Tentukan jumlah bagian berdasarkan ukuran file.
    	chunks, err := oss.SplitFileByPartNum(fileName, 3)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Buka file.
    	fd, err := os.Open(fileName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	defer fd.Close()
    
    	// Inisialisasi multipart upload dan setel penandaan objek.
    	imur, err := bucket.InitiateMultipartUpload(objectName, oss.SetTagging(tagging))
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Unggah bagian-bagian.
    	var parts []oss.UploadPart
    	for _, chunk := range chunks {
    		fd.Seek(chunk.Offset, os.SEEK_SET)
    		part, err := bucket.UploadPart(imur, fd, chunk.Size, chunk.Number)
    		if err != nil {
    			fmt.Println("Error:", err)
    			os.Exit(-1)
    		}
    		parts = append(parts, part)
    	}
    	_, err = bucket.CompleteMultipartUpload(imur, parts)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	fmt.Println(bucket.GetObjectTagging(objectName))
    }
    
  • Tambahkan penandaan objek saat append upload

    Kode berikut menunjukkan cara menambahkan penandaan objek saat append upload.

    package main
    
    import (
    	"fmt"
    	"os"
    	"strings"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    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 Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, tentukan Endpoint yang sebenarnya.
    	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, tentukan 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 {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Tentukan nama bucket. Misalnya, examplebucket.
    	bucketName := "examplebucket"
    	// Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt.
    	objectName := "exampledir/exampleobject.txt"
    
    	// Dapatkan bucket.
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Tentukan kunci dan nilai untuk setiap tag objek. Misalnya, setel kunci ke owner dan nilai ke John.
    	tag1 := oss.Tag{
    		Key:   "owner",
    		Value: "John",
    	}
    	tag2 := oss.Tag{
    		Key:   "type",
    		Value: "document",
    	}
    	tagging := oss.Tagging{
    		Tags: []oss.Tag{tag1, tag2},
    	}
    
    	var nextPos int64
    	// Tambahkan data ke objek yang dapat ditambahkan untuk pertama kali. Tag yang Anda setel dalam panggilan AppendObject pertama akan berlaku. Tag yang Anda setel dalam panggilan AppendObject berikutnya tidak berlaku.
    	nextPos, err = bucket.AppendObject(objectName, strings.NewReader("Hello OSS A \n"), nextPos, oss.SetTagging(tagging))
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	// Tambahkan data untuk kedua kalinya.
    	nextPos, err = bucket.AppendObject(objectName, strings.NewReader("Hello OSS B \n"), nextPos)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	fmt.Println(bucket.GetObjectTagging(objectName))
    }
    
  • Tambahkan penandaan objek saat resumable upload

    Kode berikut menunjukkan cara menambahkan penandaan objek saat melakukan resumable upload file lokal.

    package main
    
    import (
    	"fmt"
    	"os"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    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 Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, tentukan Endpoint yang sebenarnya.
    	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, tentukan 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 {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Tentukan nama bucket. Misalnya, examplebucket.
    	bucketName := "examplebucket"
    	// Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt.
    	objectName := "exampledir/exampleobject.txt"
    	// Tentukan path lengkap file lokal. Misalnya, D:\\localpath\\examplefile.txt.
    	// Jika Anda hanya menentukan nama file, seperti examplefile.txt, file tersebut akan diunggah dari path lokal proyek yang berisi program contoh.
    	fileName := "D:\\localpath\\examplefile.txt"
    
    	// Dapatkan bucket.
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Tentukan kunci dan nilai untuk setiap tag objek. Misalnya, setel kunci ke owner dan nilai ke John.
    	tag1 := oss.Tag{
    		Key:   "owner",
    		Value: "John",
    	}
    	tag2 := oss.Tag{
    		Key:   "type",
    		Value: "document",
    	}
    	tagging := oss.Tagging{
    		Tags: []oss.Tag{tag1, tag2},
    	}
    
    	// Pisahkan file menjadi beberapa bagian. Setel ukuran setiap bagian menjadi 100 KB. Gunakan tiga korutin untuk mengunggah bagian secara konkuren dan setel penandaan objek.
    	err = bucket.UploadFile(objectName, fileName, 100*1024, oss.Routines(3), oss.SetTagging(tagging))
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	fmt.Println(bucket.GetObjectTagging(objectName))
    }
    

Tambahkan atau ubah penandaan objek untuk objek yang telah diunggah

Jika Anda tidak menambahkan penandaan objek saat mengunggah objek atau tag yang ada tidak memenuhi kebutuhan Anda, Anda dapat menambahkan atau mengubah penandaan objek setelah unggah selesai.

Kode berikut menunjukkan cara menambahkan atau mengubah penandaan objek untuk objek yang telah diunggah.

package main

import (
	"fmt"
	"os"

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

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 Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, tentukan Endpoint yang sebenarnya.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, tentukan 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 {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Tentukan nama bucket. Misalnya, examplebucket.
	bucketName := "examplebucket"
	// Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt.
	objectName := "exampledir/exampleobject.txt"

	// Dapatkan bucket.
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Tentukan kunci dan nilai untuk setiap tag objek. Misalnya, setel kunci ke owner dan nilai ke John.
	tag1 := oss.Tag{
		Key:   "owner",
		Value: "John",
	}
	tag2 := oss.Tag{
		Key:   "type",
		Value: "document",
	}
	tagging := oss.Tagging{
		Tags: []oss.Tag{tag1, tag2},
	}
	// Setel penandaan objek.
	err = bucket.PutObjectTagging(objectName, tagging)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	fmt.Println(bucket.GetObjectTagging(objectName))
}

Tambahkan atau ubah penandaan objek untuk versi tertentu dari suatu objek

Dalam bucket yang mengaktifkan Pengendalian versi, Anda dapat menambahkan atau mengubah penandaan objek untuk versi tertentu dari suatu objek dengan menentukan ID versinya.

Kode berikut menunjukkan cara menambahkan atau mengubah penandaan objek untuk versi tertentu dari suatu objek.

Catatan

Untuk informasi selengkapnya tentang cara mendapatkan ID versi, lihat List objects (Go SDK V1).

package main

import (
	"fmt"
	"os"

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

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 Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, tentukan Endpoint yang sebenarnya.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, tentukan 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 {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Tentukan nama bucket. Misalnya, examplebucket.
	bucketName := "examplebucket"
	// Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt.
	objectName := "exampledir/exampleobject.txt"
	// Tentukan ID versi objek.
	versionId := "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****"

	// Dapatkan bucket.
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		HandleError(err)
	}
	// Tentukan kunci dan nilai untuk setiap tag objek. Misalnya, setel kunci ke owner dan nilai ke John.
	tag1 := oss.Tag{
		Key:   "owner",
		Value: "John",
	}

	tag2 := oss.Tag{
		Key:   "type",
		Value: "document",
	}

	tagging := oss.Tagging{
		Tags: []oss.Tag{tag1, tag2},
	}

	// Setel tag untuk versi objek yang ditentukan.
	err = bucket.PutObjectTagging(objectName, tagging, oss.VersionId(versionId))

	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	fmt.Println(bucket.GetObjectTagging(objectName))
}

Setel penandaan objek saat menyalin objek

Saat menyalin objek, Anda dapat menentukan cara menyetel tag untuk objek tujuan. Nilai yang valid adalah:

  • Copy (default): Menyalin tag dari objek sumber ke objek tujuan.

  • Replace: Mengabaikan tag objek sumber dan menerapkan tag yang ditentukan dalam permintaan ke objek tujuan.

Contoh berikut menunjukkan cara menyetel penandaan objek saat menyalin objek. Simple copy digunakan untuk objek yang lebih kecil dari 1 GB, sedangkan multipart copy digunakan untuk objek yang lebih besar dari 1 GB.

  • Setel penandaan objek saat simple copy

    Kode berikut menunjukkan cara menyetel penandaan objek saat melakukan simple copy objek yang lebih kecil dari 1 GB.

    package main
    
    import (
    	"fmt"
    	"os"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    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 Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, tentukan Endpoint yang sebenarnya.
    	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, tentukan 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 {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Tentukan nama bucket. Misalnya, examplebucket.
    	bucketName := "examplebucket"
    	// Tentukan path lengkap objek sumber. Path lengkap tidak boleh mengandung nama bucket. Misalnya, srcexampledir/exampleobject.txt.
    	srcObjectName := "srcexampledir/exampleobject.txt"
    	// Tentukan path lengkap objek tujuan. Path lengkap tidak boleh mengandung nama bucket. Misalnya, destexampledir1/exampleobject.txt.
    	destObjectName1 := "destexampledir1/exampleobject.txt"
    	// Tentukan path lengkap objek tujuan. Path lengkap tidak boleh mengandung nama bucket. Misalnya, destexampledir2/exampleobject.txt.
    	destObjectName2 := "destexampledir2/exampleobject.txt"
    
    	// Dapatkan bucket.
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Tentukan kunci dan nilai untuk setiap tag objek. Misalnya, setel kunci ke owner dan nilai ke John.
    	tag1 := oss.Tag{
    		Key:   "owner",
    		Value: "John",
    	}
    	tag2 := oss.Tag{
    		Key:   "type",
    		Value: "document",
    	}
    	tagging := oss.Tagging{
    		Tags: []oss.Tag{tag1, tag2},
    	}
    
    	// Saat menyalin objek, jika Anda hanya menyetel parameter tagging, penandaan objek tidak berlaku.
    	_, err = bucket.CopyObject(srcObjectName, destObjectName1, oss.SetTagging(tagging))
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Saat menyalin objek, Anda harus menyetel parameter TaggingReplace dan tagging agar penandaan objek berlaku.
    	_, err = bucket.CopyObject(srcObjectName, destObjectName2, oss.SetTagging(tagging), oss.TaggingDirective(oss.TaggingReplace))
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	fmt.Println(bucket.GetObjectTagging(srcObjectName))
    	fmt.Println(bucket.GetObjectTagging(destObjectName1))
    	fmt.Println(bucket.GetObjectTagging(destObjectName2))
    }
    
  • Setel penandaan objek saat multipart copy

    Kode berikut menunjukkan cara menyetel penandaan objek saat melakukan multipart copy objek yang lebih besar dari 1 GB.

    package main
    
    import (
    	"fmt"
    	"os"
    	"strings"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    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 Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, tentukan Endpoint yang sebenarnya.
    	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, tentukan 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 {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Tentukan nama bucket. Misalnya, examplebucket.
    	bucketName := "examplebucket"
    	// Tentukan path lengkap objek sumber. Path lengkap tidak boleh mengandung nama bucket. Misalnya, srcexampledir/exampleobject.txt.
    	srcObjectName := "srcexampledir/exampleobject.txt"
    	// Tentukan path lengkap objek tujuan. Path lengkap tidak boleh mengandung nama bucket. Misalnya, destexampledir/exampleobject.txt.
    	destObjectName := "destexampledir/exampleobject.txt"
    
    	// Dapatkan bucket.
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Tentukan kunci dan nilai untuk setiap tag objek. Misalnya, setel kunci ke owner dan nilai ke John.
    	tag1 := oss.Tag{
    		Key:   "owner",
    		Value: "John",
    	}
    	tag2 := oss.Tag{
    		Key:   "type",
    		Value: "document",
    	}
    	tagging := oss.Tagging{
    		Tags: []oss.Tag{tag1, tag2},
    	}
    
    	// Unggah objek untuk multipart copy.
    	content := "this your object value"
    	err = bucket.PutObject(srcObjectName, strings.NewReader(content))
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// Inisialisasi multipart upload dan setel penandaan objek.
    	imur, err := bucket.InitiateMultipartUpload(destObjectName, oss.SetTagging(tagging))
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	// Pisahkan objek menjadi satu bagian untuk diunggah.
    	part, err := bucket.UploadPartCopy(imur, bucketName, srcObjectName, 0, int64(len(content)), 1)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	parts := []oss.UploadPart{part}
    	_, err = bucket.CompleteMultipartUpload(imur, parts)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	fmt.Println(bucket.GetObjectTagging(destObjectName))
    }
    

Setel tag untuk symbolic link

Kode berikut menunjukkan cara menyetel tag untuk symbolic link.

package main

import (
	"fmt"
	"os"
	"strings"

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

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 Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, tentukan Endpoint yang sebenarnya.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, tentukan 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 {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Tentukan nama bucket. Misalnya, examplebucket.
	bucketName := "examplebucket"
	// Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt.
	objectName := "exampledir/exampleobject.txt"
	// Tentukan path lengkap symbolic link. Misalnya, shortcut/myobject.txt.
	symlinkName := "shortcut/myobject.txt"

	// Dapatkan bucket.
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Tentukan kunci dan nilai untuk setiap tag objek. Misalnya, setel kunci ke owner dan nilai ke John.
	tag1 := oss.Tag{
		Key:   "owner",
		Value: "John",
	}
	tag2 := oss.Tag{
		Key:   "type",
		Value: "document",
	}
	tagging := oss.Tagging{
		Tags: []oss.Tag{tag1, tag2},
	}

	err = bucket.PutObject(objectName, strings.NewReader("Hello OSS"))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	err = bucket.PutSymlink(objectName, symlinkName, oss.SetTagging(tagging))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	fmt.Println(bucket.GetObjectTagging(objectName))
}