All Products
Search
Document Center

Object Storage Service:Pengambilan Skalar (Go SDK V2)

Last Updated:Nov 09, 2025

Pengambilan skalar adalah fitur OSS yang memungkinkan Anda menanyakan objek berdasarkan metadata mereka. Dengan kondisi khusus, Anda dapat dengan cepat menyaring dan mengambil daftar objek. Topik ini menjelaskan cara melakukan pengambilan skalar menggunakan Go SDK V2.

Perhatian

  • Kode contoh dalam topik ini menggunakan ID Wilayah cn-hangzhou untuk China (Hangzhou) sebagai contoh. Titik akhir publik digunakan secara default. Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir yang didukung oleh OSS, lihat Wilayah dan titik akhir OSS.

  • Kode contoh dalam topik ini membaca kredensial akses dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan kredensial akses.

Kode contoh

Aktifkan fitur manajemen metadata

Kode berikut menunjukkan cara mengaktifkan fitur manajemen metadata untuk bucket tertentu. Setelah fitur ini diaktifkan, OSS membuat pustaka indeks metadata untuk bucket tersebut dan membuat indeks metadata untuk semua objek di dalamnya. Setelah pustaka indeks metadata dibuat, OSS melakukan pemindaian tambahan hampir real-time terhadap file baru di bucket dan membuat indeks metadata untuk file-file tersebut.

package main

import (
	"context"
	"flag"   
	"log"     

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"          
	"github/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" 
)

var (
	region     string // Tentukan variabel untuk menyimpan informasi wilayah yang diperoleh dari baris perintah.
	bucketName string // Tentukan variabel untuk menyimpan nama bucket yang diperoleh dari baris perintah.
)

// Fungsi init dieksekusi sebelum fungsi utama untuk menginisialisasi program.
func init() {
	// Tetapkan parameter baris perintah untuk menentukan wilayah.
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Tetapkan parameter baris perintah untuk menentukan nama bucket.
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	flag.Parse() // Parse parameter baris perintah.

	// Periksa apakah nama bucket disediakan. Jika tidak, program akan menampilkan parameter default dan keluar.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan") // Log kesalahan dan hentikan program.
	}

	// Periksa apakah wilayah disediakan. Jika tidak, program akan menampilkan parameter default dan keluar.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan") // Log kesalahan dan hentikan program.
	}

	// Buat konfigurasi klien dan gunakan variabel lingkungan sebagai penyedia kredensial.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Gunakan konfigurasi untuk membuat instance klien OSS.

	// Buat permintaan OpenMetaQuery untuk mengaktifkan fitur manajemen metadata untuk bucket tertentu.
	request := &oss.OpenMetaQueryRequest{
		Bucket: oss.Ptr(bucketName), // Tentukan nama bucket yang akan dioperasikan.
	}
	result, err := client.OpenMetaQuery(context.TODO(), request) // Eksekusi permintaan untuk mengaktifkan fitur manajemen metadata untuk bucket.
	if err != nil {
		log.Fatalf("gagal membuka meta query %v", err) // Jika terjadi kesalahan, log pesan kesalahan dan hentikan program.
	}

	log.Printf("hasil pembukaan meta query:%#v\n", result) // Cetak hasil pengaktifan manajemen metadata.
}

Dapatkan informasi tentang pustaka indeks metadata

Kode berikut menunjukkan cara mendapatkan informasi tentang pustaka indeks metadata untuk bucket tertentu.

package main

import (
	"context" 
	"flag"   
	"log"   

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // Tentukan variabel untuk menyimpan informasi wilayah yang diperoleh dari baris perintah.
	bucketName string // Tentukan variabel untuk menyimpan nama bucket yang diperoleh dari baris perintah.
)

// Fungsi init dieksekusi sebelum fungsi utama untuk menginisialisasi program.
func init() {
	// Tetapkan parameter baris perintah untuk menentukan wilayah.
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Tetapkan parameter baris perintah untuk menentukan nama bucket.
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	flag.Parse() // Parse parameter baris perintah.

	// Periksa apakah nama bucket disediakan. Jika tidak, program akan menampilkan parameter default dan keluar.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan") // Log kesalahan dan hentikan program.
	}

	// Periksa apakah wilayah disediakan. Jika tidak, program akan menampilkan parameter default dan keluar.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan") // Log kesalahan dan hentikan program.
	}

	// Buat konfigurasi klien dan gunakan variabel lingkungan sebagai penyedia kredensial dan wilayah yang ditentukan.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat instance klien OSS.

	// Buat permintaan GetMetaQueryStatus untuk mendapatkan informasi tentang pustaka indeks metadata bucket tertentu.
	request := &oss.GetMetaQueryStatusRequest{
		Bucket: oss.Ptr(bucketName), // Tentukan nama bucket yang akan diquery.
	}
	result, err := client.GetMetaQueryStatus(context.TODO(), request) // Eksekusi permintaan untuk mendapatkan informasi tentang pustaka indeks metadata bucket.
	if err != nil {
		log.Fatalf("gagal mendapatkan status meta query %v", err) // Jika terjadi kesalahan, log pesan kesalahan dan hentikan program.
	}

	log.Printf("hasil mendapatkan status meta query:%#v\n", result)
}

Kueri objek yang memenuhi kondisi spesifik

Kode berikut menunjukkan cara menggunakan fitur pengambilan skalar untuk menanyakan objek yang memenuhi kondisi tertentu dan mencantumkan informasi tentang objek berdasarkan bidang dan metode pengurutan yang ditentukan.

package main

import (
	"context"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // Tentukan variabel untuk menyimpan informasi wilayah yang diperoleh dari baris perintah.
	bucketName string // Tentukan variabel untuk menyimpan nama bucket yang diperoleh dari baris perintah.
)

// Fungsi init dieksekusi sebelum fungsi utama untuk menginisialisasi program.
func init() {
	// Tetapkan parameter baris perintah untuk menentukan wilayah. Nilai default adalah string kosong.
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Tetapkan parameter baris perintah untuk menentukan nama bucket. Nilai default adalah string kosong.
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	flag.Parse() // Parse parameter baris perintah.

	// Periksa apakah nama bucket disediakan. Jika tidak, program akan menampilkan parameter default dan keluar.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah disediakan. Jika tidak, program akan menampilkan parameter default dan keluar.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Buat konfigurasi klien dan gunakan variabel lingkungan sebagai penyedia kredensial dan wilayah yang ditentukan.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Gunakan konfigurasi untuk membuat instance klien OSS.

	// Buat permintaan DoMetaQuery untuk menanyakan objek yang memenuhi kondisi tertentu.
	request := &oss.DoMetaQueryRequest{
		Bucket: oss.Ptr(bucketName), // Tentukan nama bucket yang akan diquery.
		MetaQuery: &oss.MetaQuery{
			Query: oss.Ptr(`{"Field": "Size","Value": "1048576","Operation": "gt"}`), // Kondisi query: objek yang lebih besar dari 1 MB.
			Sort:  oss.Ptr("Size"),                                                   // Bidang sortir: urutkan berdasarkan ukuran objek.
			Order: oss.Ptr(oss.MetaQueryOrderAsc),                                    // Urutan sortir: naik.
		},
	}
	result, err := client.DoMetaQuery(context.TODO(), request) // Kirim permintaan untuk melakukan query metadata.
	if err != nil {
		log.Fatalf("gagal melakukan meta query %v", err)
	}

	// Cetak NextToken, yang digunakan untuk query halaman untuk mengambil data dari halaman berikutnya.
	fmt.Printf("NextToken:%s\n", *result.NextToken)

	// Lintasi hasil yang dikembalikan dan cetak detail setiap file.
	for _, file := range result.Files {
		fmt.Printf("Nama File: %s\n", *file.Filename)
		fmt.Printf("ukuran: %d\n", file.Size)
		fmt.Printf("Waktu Modifikasi File:%s\n", *file.FileModifiedTime)
		fmt.Printf("Tipe Objek OSS:%s\n", *file.OSSObjectType)
		fmt.Printf("Kelas Penyimpanan OSS:%s\n", *file.OSSStorageClass)
		fmt.Printf("ACL Objek:%s\n", *file.ObjectACL)
		fmt.Printf("ETag:%s\n", *file.ETag)
		fmt.Printf("OSS CRC64:%s\n", *file.OSSCRC64)
		if file.OSSTaggingCount != nil {
			fmt.Printf("Jumlah Tagging OSS:%d\n", *file.OSSTaggingCount)
		}

		// Cetak informasi tag objek.
		for _, tagging := range file.OSSTagging {
			fmt.Printf("Kunci Tagging OSS:%s\n", *tagging.Key)
			fmt.Printf("Nilai Tagging OSS:%s\n", *tagging.Value)
		}

		// Cetak metadata yang ditentukan pengguna.
		for _, userMeta := range file.OSSUserMeta {
			fmt.Printf("Kunci Metadata Pengguna OSS:%s\n", *userMeta.Key)
			fmt.Printf("Nilai Kunci Metadata Pengguna OSS:%s\n", *userMeta.Value)
		}
	}
}

Nonaktifkan fitur manajemen metadata

Kode berikut menunjukkan cara menonaktifkan fitur manajemen metadata untuk bucket tertentu.

package main

import (
	"context"
	"flag"    
	"log"    

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"          
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" 
)

var (
	region     string // Tentukan variabel untuk menyimpan informasi wilayah yang diperoleh dari baris perintah.
	bucketName string // Tentukan variabel untuk menyimpan nama bucket yang diperoleh dari baris perintah.
)

// Fungsi init dieksekusi sebelum fungsi utama untuk menginisialisasi program.
func init() {
	// Tetapkan parameter baris perintah untuk menentukan wilayah.
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Tetapkan parameter baris perintah untuk menentukan nama bucket.
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}


func main() {
	flag.Parse() // Parse parameter baris perintah.

	// Periksa apakah nama bucket disediakan. Jika tidak, program akan menampilkan parameter default dan keluar.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan") // Log kesalahan dan hentikan program.
	}

	// Periksa apakah wilayah disediakan. Jika tidak, program akan menampilkan parameter default dan keluar.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan") // Log kesalahan dan hentikan program.
	}

	// Buat konfigurasi klien dan gunakan variabel lingkungan sebagai penyedia kredensial dan wilayah yang ditentukan.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat instance klien OSS.

	// Buat permintaan CloseMetaQuery untuk menonaktifkan fitur manajemen metadata untuk bucket tertentu.
	request := &oss.CloseMetaQueryRequest{
		Bucket: oss.Ptr(bucketName), // Tentukan nama bucket yang akan dioperasikan.
	}
	result, err := client.CloseMetaQuery(context.TODO(), request) // Eksekusi permintaan untuk menonaktifkan fitur manajemen metadata untuk bucket.
	if err != nil {
		log.Fatalf("gagal menutup meta query %v", err) // Jika terjadi kesalahan, log pesan kesalahan dan hentikan program.
	}

	log.Printf("hasil penutupan meta query:%#v\n", result)
}

Referensi

  • Untuk informasi lebih lanjut tentang pengambilan skalar, lihat Pengambilan Skalar.

  • Untuk informasi lebih lanjut tentang operasi API terkait pengindeksan data, lihat Pengindeksan Data.

  • Untuk kode contoh lengkap pengambilan skalar, lihat Contoh GitHub.