全部产品
Search
文档中心

Object Storage Service:Tingkatkan OSS SDK untuk Go dari V1 ke V2

更新时间:Jun 26, 2025

Topik ini menjelaskan cara meningkatkan Object Storage Service (OSS) SDK untuk Go dari V1 ke V2.

Versi terawal untuk Go

OSS SDK untuk Go V2 memerlukan versi Go 1.18 atau yang lebih baru.

Tentukan jalur impor

OSS SDK untuk Go V2 menggunakan repositori kode baru, alibabacloud-oss-go-sdk-v2. Struktur kode diubah dan diorganisir berdasarkan modul fungsional. Tabel berikut menjelaskan jalur dan deskripsi dari modul fungsional.

Jalur Modul

Deskripsi

github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss

Inti dari OSS SDK untuk Go, yang digunakan untuk memanggil operasi API dasar dan lanjutan.

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

Kredensial akses.

github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/retry

Kebijakan ulang.

github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/signer

Tanda tangan.

github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/transport

Klien HTTP.

github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/crypto

Konfigurasi enkripsi sisi klien.

Contoh OSS SDK untuk Go V1

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

Contoh OSS SDK untuk Go V2

import (
  "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
  "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
  // Impor retry, transport, atau signer berdasarkan kebutuhan bisnis Anda.
  //"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/xxxx"
)

Konfigurasikan parameter

  1. OSS SDK untuk Go V2 menyederhanakan konfigurasi dengan mengimpor konfigurasi ke config. OSS SDK untuk Go V2 juga menyediakan fungsi pembantu dengan awalan With untuk memfasilitasi penimpaan programatik konfigurasi default.

  2. OSS SDK untuk Go V2 menggunakan tanda tangan V4 secara default. Dalam hal ini, Anda harus menentukan wilayah.

  3. OSS SDK untuk Go V2 memungkinkan Anda membuat titik akhir berdasarkan informasi wilayah. Jika Anda mengakses sumber daya di cloud publik, Anda tidak perlu membuat titik akhir.

Contoh OSS SDK untuk Go V1

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

// Dapatkan kredensial akses dari variabel lingkungan.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()

// Atur periode timeout koneksi HTTP menjadi 20 dan periode timeout baca/tulis koneksi HTTP menjadi 60. Unit: detik. 
time := oss.Timeout(20,60)

// Jangan verifikasi sertifikat SSL.
verifySsl := oss.InsecureSkipVerify(true)

// Tentukan log.
logLevel := oss.SetLogLevel(oss.LogInfo)

// Titik akhir
endpoint := "oss-cn-hangzhou.aliyuncs.com"

client, err := oss.New(endpoint, "", "", oss.SetCredentialsProvider(&provider), time, verifySsl, logLevel)

Contoh OSS SDK untuk Go V2

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

...

// Dapatkan kredensial akses dari variabel lingkungan.
provider := credentials.NewEnvironmentVariableCredentialsProvider()

cfg := oss.LoadDefaultConfig().
  WithCredentialsProvider(provider).
  // Atur periode timeout koneksi HTTP menjadi 20. Unit: detik.
  WithConnectTimeout(20 * time.Second).
  // Atur periode timeout baca/tulis koneksi HTTP menjadi 60. Unit: detik.
  ReadWriteTimeout(60 * time.Second).
  // Jangan verifikasi sertifikat SSL.
  WithInsecureSkipVerify(true).
  // Tentukan log.
  WithLogLevel(oss.LogInfo).
  // Tentukan wilayah.
  WithRegion("cn-hangzhou")

client := oss.NewClient(cfg)

Buat klien

Dalam OSS SDK untuk Go V2, fungsi pembuatan klien diubah dari New menjadi NewClient. Selain itu, fungsi pembuatan klien tidak lagi mendukung parameter titik akhir, ak, dan sk.

Contoh OSS SDK untuk Go V1

client, err := oss.New(endpoint, "ak", "sk")

Contoh OSS SDK untuk Go V2

client := oss.NewClient(cfg)

Panggil operasi API

Operasi API dasar digabungkan ke dalam metode operasi tunggal dalam format <NamaOperasi>, parameter permintaan suatu operasi digabungkan ke dalam <NamaOperasi>Permintaan, dan parameter respons suatu operasi digabungkan ke dalam <NamaOperasi>Hasil. Metode operasi diimpor ke Client, dan context.Context perlu ditentukan pada saat yang sama. Sintaks:

func (c *Client) <NamaOperasi>(ctx context.Context, request *<NamaOperasi>Permintaan, optFns ...func(*Options)) (*<NamaOperasi>Hasil,, error)

Untuk informasi lebih lanjut, lihat Operasi API Dasar.

Contoh OSS SDK untuk Go V1

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

...

provider, err := oss.NewEnvironmentVariableCredentialsProvider()

client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))  

bucket, err := client.Bucket("examplebucket")

err = bucket.PutObject("exampleobject.txt", bytes.NewReader([]byte("example data")))

Contoh OSS SDK untuk Go V2

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

...

cfg := oss.LoadDefaultConfig().
  WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
  WithRegion("your region")

client := oss.NewClient(cfg)

result, err := client.PutObject(context.TODO(), &oss.PutObjectRequest{
  Bucket: oss.Ptr("examplebucket"),
  Key:    oss.Ptr("exampleobject.txt"),
  Body:   bytes.NewReader([]byte("example data")),
})

Hasilkan URL pra-tandatangani

Dalam OSS SDK untuk Go V2, nama operasi yang digunakan untuk menghasilkan URL pra-tandatangani diubah dari SignURL menjadi Presign, dan operasi tersebut diimpor ke Client. Sintaks:

func (c *Client) Presign(ctx context.Context, request any, optFns ...func(*PresignOptions)) (*PresignResult, error)

Tipe parameter request sama dengan '<NamaOperasi>Permintaan' dalam operasi API.

Respons berisi URL pra-tandatangani, metode HTTP, waktu kedaluwarsa URL, dan header permintaan yang ditandatangani. Contoh:

type PresignResult struct {
  Method        string
  URL           string
  Expiration    time.Time
  SignedHeaders map[string]string
}

Untuk informasi lebih lanjut, lihat URL Pra-tandatangani.

Kode contoh berikut memberikan contoh migrasi objek dari OSS SDK untuk Go V1 ke OSS SDK untuk Go V2 dengan menghasilkan URL pra-tandatangani yang digunakan untuk mengunduh objek:

Contoh OSS SDK untuk Go V1

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

...

provider, err := oss.NewEnvironmentVariableCredentialsProvider()

client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))  

bucket, err := client.Bucket("examplebucket")

signedURL, err := bucket.SignURL("exampleobject.txt", oss.HTTPGet, 60)

fmt.Printf("Sign Url:%s\n", signedURL)

Contoh OSS SDK untuk Go V2

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

...

cfg := oss.LoadDefaultConfig().
	WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	WithRegion("your region")

client := oss.NewClient(cfg)

result, err := client.Presign(
	context.TODO(),
	&oss.GetObjectRequest{
		Bucket: oss.Ptr("examplebucket"),
		Key:    oss.Ptr("exampleobject.txt"),
	},
	oss.PresignExpires(60*time.Second),
)

fmt.Printf("Sign Method:%v\n", result.Method)
fmt.Printf("Sign Url:%v\n", result.URL)
fmt.Printf("Sign Expiration:%v\n", result.Expiration)
for k, v := range result.SignedHeaders {
	fmt.Printf("SignedHeader %v:%v\n", k, v)
}

Panggil operasi transfer yang dapat dilanjutkan

OSS SDK untuk Go V2 menggunakan manajer transmisi data, termasuk Uploader, Downloader, dan Copier, untuk mengelola pengunggahan, pengunduhan, dan penyalinan objek masing-masing. Operasi transfer yang dapat dilanjutkan asli (Bucket.UploadFile, Bucket.DownloadFile, dan Bucket.CopyFile) dihapus.

Tabel berikut menjelaskan operasi transfer yang dapat dilanjutkan dalam OSS SDK untuk Go V1 dan OSS SDK untuk Go V2.

Skenario

v2

v1

Unggah objek

Uploader.UploadFile

Bucket.UploadFile

Unggah aliran (io.Reader)

Uploader.UploadFrom

Tidak didukung

Unduh objek ke komputer lokal

Downloader.DownloadFile

Bucket.DownloadFile

Salin objek

Copier.Copy

Bucket.CopyFile

Perubahan Nilai Default

Skenario

v2

v1

Ukuran bagian unggah objek

6 MiB

Konfigurasikan ukuran bagian dengan menentukan parameter

Nilai default konkurensi unggah objek

3

1

Ambang batas ukuran unggah objek

Ukuran bagian

Tidak ada

Catat kemajuan unggah objek dalam file checkpoint

Didukung

Didukung

Ukuran bagian unduhan objek

6 MiB

Konfigurasikan ukuran bagian dengan menentukan parameter

Nilai default konkurensi unduhan objek

3

1

Ambang batas ukuran unduhan objek

Ukuran bagian

Tidak ada

Catat kemajuan unduhan objek dalam file checkpoint

Didukung

Didukung

Ukuran bagian salinan objek

64 MiB

Bucket.UploadFile

Nilai default konkurensi salinan objek

3

1

Ambang batas ukuran salinan objek

200 MiB

Tidak ada

Catat kemajuan salinan objek dalam file checkpoint

Tidak didukung

Didukung

Catatan

Parameter ambang batas ukuran unggah objek, ambang batas ukuran unduhan objek, atau ambang batas ukuran salinan objek yang tercantum di atas menentukan bahwa ketika ukuran objek lebih besar dari nilai parameter, unggah multipart, unduhan multipart, atau salinan multipart, masing-masing, dilakukan.

Untuk informasi lebih lanjut tentang cara menggunakan manajer transmisi data, lihat Manajer Transmisi.

Lakukan enkripsi sisi klien

OSS SDK untuk Go V2 menggunakan EncryptionClient untuk menyediakan enkripsi sisi klien. OSS SDK untuk Go V2 juga menyederhanakan operasi API yang digunakan untuk melakukan enkripsi sisi klien dan mengadopsi aturan penamaan operasi dan metode pemanggilan yang sama dengan Client. Selain itu, OSS SDK untuk Go V2 hanya memberikan referensi tentang cara melakukan enkripsi sisi klien dengan menggunakan CMK berbasis RSA yang dikelola sendiri.

Untuk informasi lebih lanjut tentang cara melakukan enkripsi sisi klien dengan menggunakan Key Management Service (KMS), kunjungi sample/crypto/kms.go.

Untuk informasi lebih lanjut tentang enkripsi sisi klien, lihat Enkripsi Sisi Klien.

Kode contoh berikut memberikan contoh penggunaan CMK berbasis RSA untuk melakukan enkripsi sisi klien ketika Anda mengunggah objek menggunakan OSS SDK untuk Go V1 dan OSS SDK untuk Go V2:

V1

import "github.com/aliyun/aliyun-oss-go-sdk/oss"
import "github.com/aliyun/aliyun-oss-go-sdk/oss/crypto"

...

provider, err := oss.NewEnvironmentVariableCredentialsProvider()

client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))  

materialDesc := make(map[string]string)
materialDesc["desc"] = "deskripsi informasi materi kunci enkripsi utama Anda"

masterRsaCipher, err := osscrypto.CreateMasterRsa(materialDesc, "yourRsaPublicKey", "yourRsaPrivateKey")

contentProvider := osscrypto.CreateAesCtrCipher(masterRsaCipher)

cryptoBucket, err := osscrypto.GetCryptoBucket(client, "examplebucket", contentProvider)

err = cryptoBucket.PutObject("exampleobject.txt", bytes.NewReader([]byte("example data")))

V2

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

cfg := oss.LoadDefaultConfig().
  WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
  WithRegion("your region")

client := oss.NewClient(cfg)

materialDesc := make(map[string]string)
materialDesc["desc"] = "deskripsi informasi materi kunci enkripsi utama Anda"

mc, err := crypto.CreateMasterRsa(materialDesc, "yourRsaPublicKey", "yourRsaPrivateKey")
eclient, err := NewEncryptionClient(client, mc)

result, err := eclient.PutObject(context.TODO(), &PutObjectRequest{
  Bucket: Ptr("examplebucket"),
  Key:    Ptr("exampleobject.txt"),
  Body:   bytes.NewReader([]byte("example data")),
})

Konfigurasikan kebijakan ulang

Secara default, OSS SDK untuk Go V2 mendukung ulang untuk permintaan HTTP. Saat Anda meningkatkan OSS SDK untuk Go V1 ke OSS SDK untuk Go V2, Anda harus menghapus kode ulang asli untuk mencegah peningkatan jumlah ulang.

Referensi

Untuk informasi lebih lanjut, lihat Panduan Pengembang.