Tüm Ürünler
Search
Belge Merkezi

:Upgrade OSS SDK for Go from V1 to V2

Son Güncelleme:Oct 02, 2026

OSS SDK for Go'nun V1 ve V2 sürümleri arasındaki temel değişiklikleri kapsar; içe aktarma yolları, yapılandırma, API işlemleri, önceden imzalı URL'ler, kaldığı yerden devam eden aktarımlar ve şifreleme konularını içerir.

Minimum Go Sürümü

V2, Go 1.18 veya sonraki bir sürümü gerektirir.

İçe Aktarma Yolları

V2, kodun işlevsel modüllere göre düzenlendiği yeni bir depo (alibabacloud-oss-go-sdk-v2) kullanır.


Modül yolu


Açıklama


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


Temel ve gelişmiş API işlemleri için çekirdek modül.


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


Erişim kimlik bilgileri.


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


Yeniden deneme ilkeleri.


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


İmzalar.


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


HTTP istemcileri.


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


İstemci taraflı şifreleme.

OSS SDK for Go V1 Örneği

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

OSS SDK for Go V2 Örneği

import (
  "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
  "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
  // Import retry, transport, or signer based on your business requirements.
  //"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/xxxx"
)

Yapılandırma

  1. V2, ayarları config içinde birleştirir ve geçersiz kılmalar için With önekli yardımcı işlevler sağlar.

  2. V2 varsayılan olarak V4 imzalarını kullanır; bu nedenle bölgeyi belirtmeniz gerekir.

  3. V2 uç noktayı bölgeden türetir. Genel cloud erişimi için açık bir uç nokta belirtilmesine gerek yoktur.

OSS SDK for Go V1 Örneği

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

// Obtain access credentials from environment variables.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()

// Set the timeout period of an HTTP connection to 20 and the read or write timeout period of an HTTP connection to 60. Unit: seconds. 
time := oss.Timeout(20,60)

// Do not verify SSL certificates.
verifySsl := oss.InsecureSkipVerify(true)

// Specify logs.
logLevel := oss.SetLogLevel(oss.LogInfo)

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

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

OSS SDK for Go V2 Örneği

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

...

// Obtain access credentials from environment variables.
provider := credentials.NewEnvironmentVariableCredentialsProvider()

cfg := oss.LoadDefaultConfig().
  WithCredentialsProvider(provider).
  // Set the timeout period of an HTTP connection to 20. Unit: seconds.
  WithConnectTimeout(20 * time.Second).
  // Set the read or write timeout period of an HTTP connection to 60. Unit: seconds.
  ReadWriteTimeout(60 * time.Second).
  // Do not verify SSL certificates.
  WithInsecureSkipVerify(true).
  // Specify logs.
  WithLogLevel(oss.LogInfo).
  // Specify the region.
  WithRegion("cn-hangzhou")

client := oss.NewClient(cfg)

İstemci Oluşturma

V2, New yöntemini NewClient ile değiştirir; bu yöntem artık uç nokta, AK veya SK parametrelerini doğrudan kabul etmez.

OSS SDK for Go V1 Örneği

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

OSS SDK for Go V2 Örneği

client := oss.NewClient(cfg)

API İşlemleri

V2, her API'yi <OperationName> adlı tek bir Client yönteminde birleştirir; istek türü <OperationName>Request ve yanıt türü <OperationName>Result şeklindedir. Her çağrı bir context.Context gerektirir. Söz dizimi:

func (c *Client) <OperationName>(ctx context.Context, request *<OperationName>Request, optFns ...func(*Options)) (*<OperationName>Result,, error)

Temel API işlemleri.

OSS SDK for Go V1 Örneği

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")))

OSS SDK for Go V2 Örneği

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")),
})

Önceden İmzalı URL'ler

V2, önceden imzalama yöntemini SignURL yerine Presign olarak yeniden adlandırır ve bunu Client'a taşır. Söz dizimi:

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

request parametresi türü, ilgili API'deki '<OperationName>Request' ile eşleşir.

Yanıt, önceden imzalı URL'yi, HTTP yöntemini, sona erme zamanını ve imzalanan üst bilgileri içerir. Örnek:

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

Önceden imzalı URL.

Aşağıdaki örneklerde V1 ve V2'de önceden imzalı bir indirme URL'si oluşturulmaktadır:

OSS SDK for Go V1 Örneği

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)

OSS SDK for Go V2 Örneği

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)
}

Kaldığı Yerden Devam Eden Aktarımlar

V2, V1 kaldığı yerden devam etme yöntemlerinin (Bucket.UploadFile, Bucket.DownloadFile, Bucket.CopyFile) yerine aktarım yöneticilerini kullanır: Uploader, Downloader ve Copier.

Aşağıdaki tabloda V1 yöntemleri V2 eşdeğerleriyle eşleştirilmiştir.


Senaryo


v2


v1


Nesne yükleme


Uploader.UploadFile


Bucket.UploadFile


Akış yükleme (io.Reader)


Uploader.UploadFrom


Desteklenmiyor


Nesneyi yerel bilgisayara indirme


Downloader.DownloadFile


Bucket.DownloadFile


Nesne kopyalama


Copier.Copy


Bucket.CopyFile

Varsayılan değerlerdeki değişiklikler


Senaryo


v2


v1


Nesne yükleme parça boyutu


6 MiB


Parametreleri belirterek parça boyutunu yapılandırın


Nesne yükleme eşzamanlılık varsayılan değeri


%3


%1


Nesne yükleme boyutu eşiği


Parça boyutu


Yok


Nesne yükleme ilerlemesini kontrol noktası dosyasında kaydetme


Destekleniyor


Destekleniyor


Nesne indirme parça boyutu


6 MiB


Parametreleri belirterek parça boyutunu yapılandırın


Nesne indirme eşzamanlılık varsayılan değeri


%3


%1


Nesne indirme boyutu eşiği


Parça boyutu


Yok


Nesne indirme ilerlemesini kontrol noktası dosyasında kaydetme


Destekleniyor


Destekleniyor


Nesne kopyalama parça boyutu


64 MiB


Bucket.UploadFile


Nesne kopyalama eşzamanlılık varsayılan değeri


%3


%1


Nesne kopyalama boyutu eşiği


200 MiB


Yok


Nesne kopyalama ilerlemesini kontrol noktası dosyasında kaydetme


Desteklenmiyor


Destekleniyor

Not

Bir nesne boyut eşiğini aştığında, V2 otomatik olarak çok parçalı yükleme, indirme veya kopyalama kullanır.

Aktarım yöneticileri.

İstemci Taraflı Şifreleme

V2, istemci taraflı şifreleme için EncryptionClient sunar; bu bileşen, Client ile aynı adlandırma kurallarını ve çağrı desenlerini izler. V2 yalnızca RSA tabanlı, kendi kendine yönetilen CMK'lar için örnekler sağlar.

KMS tabanlı bir örnek şu adreste mevcuttur: sample/crypto/kms.go.

İstemci taraflı şifreleme.

Aşağıdaki örneklerde V1 ve V2'de RSA tabanlı CMK şifrelemesiyle bir nesne yüklenmektedir:

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"] = "your master encrypt key material describe information"

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"] = "your master encrypt key material describe information"

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")),
})

Yeniden Deneme İlkelerini Yapılandırma

V2 varsayılan olarak HTTP isteklerini yeniden dener. Aşırı yeniden denemelerden kaçınmak için V1 kodunuzdaki tüm özel yeniden deneme mantığını kaldırın.

Başvuru

Geliştirici Kılavuzu.