すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:オブジェクトタグの設定 (Go SDK V1)

最終更新日:Nov 29, 2025

OSS は、バケット内のオブジェクトを分類するためのオブジェクトタグ付けをサポートしています。同じタグを持つオブジェクトに対して、ライフサイクルルールとアクセス権限を設定できます。

注意事項

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスが作成されます。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「クライアントの設定 (Go SDK V1)」をご参照ください。

  • オブジェクトタグを設定するには、oss:PutObjectTagging 権限が必要です。詳細については、「RAM ユーザーへのカスタムアクセスポリシーの付与」をご参照ください。

アップロード中のオブジェクトタグの追加

  • シンプルアップロード中のオブジェクトタグの追加

    以下に、シンプルアップロード中にオブジェクトタグを追加するコード例を示します。

    package main
    
    import (
    	"fmt"
    	"os"
    	"strings"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    func main() {
    	// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
    	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	// OSSClient インスタンスを作成します。
    	// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを指定してください。
    	// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを指定してください。
    	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
    	clientOptions = append(clientOptions, oss.Region("yourRegion"))
    	// 署名バージョンを設定します。
    	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
    	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// バケット名を指定します。例:examplebucket。
    	bucketName := "examplebucket"
    	// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。
    	objectName := "exampledir/exampleobject.txt"
    
    	// バケットを取得します。
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// 各オブジェクトタグのキーと値を指定します。たとえば、キーを owner、値を 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"), oss.SetTagging(tagging))
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	fmt.Println(bucket.GetObjectTagging(objectName))
    }
    
  • マルチパートアップロード中のオブジェクトタグの追加

    以下に、ローカルファイルのマルチパートアップロードを実行する際にオブジェクトタグを追加するコード例を示します。

    package main
    
    import (
    	"fmt"
    	"os"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    func main() {
    	// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
    	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	// OSSClient インスタンスを作成します。
    	// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを指定してください。
    	// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを指定してください。
    	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
    	clientOptions = append(clientOptions, oss.Region("yourRegion"))
    	// 署名バージョンを設定します。
    	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
    	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// バケット名を指定します。例:examplebucket。
    	bucketName := "examplebucket"
    	// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。
    	objectName := "exampledir/exampleobject.txt"
    	// ローカルファイルの完全なパスを指定します。例:D:\\localpath\\examplefile.txt。
    	// examplefile.txt のようにファイル名のみを指定した場合、サンプルプログラムを含むプロジェクトのローカルパスからファイルがアップロードされます。
    	fileName := "D:\\localpath\\examplefile.txt"
    
    	// バケットを取得します。
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// 各オブジェクトタグのキーと値を指定します。たとえば、キーを owner、値を John に設定します。
    	tag1 := oss.Tag{
    		Key:   "owner",
    		Value: "John",
    	}
    	tag2 := oss.Tag{
    		Key:   "type",
    		Value: "document",
    	}
    	tagging := oss.Tagging{
    		Tags: []oss.Tag{tag1, tag2},
    	}
    
    	// ファイルを 3 つのパートに分割してアップロードします。パート数はファイルサイズに基づいて決定します。
    	chunks, err := oss.SplitFileByPartNum(fileName, 3)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// ファイルを開きます。
    	fd, err := os.Open(fileName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	defer fd.Close()
    
    	// マルチパートアップロードを初期化し、オブジェクトタグを設定します。
    	imur, err := bucket.InitiateMultipartUpload(objectName, oss.SetTagging(tagging))
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// パートをアップロードします。
    	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))
    }
    
  • 追加アップロード中のオブジェクトタグの追加

    以下に、追加アップロード中にオブジェクトタグを追加するコード例を示します。

    package main
    
    import (
    	"fmt"
    	"os"
    	"strings"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    func main() {
    	// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
    	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	// OSSClient インスタンスを作成します。
    	// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを指定してください。
    	// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを指定してください。
    	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
    	clientOptions = append(clientOptions, oss.Region("yourRegion"))
    	// 署名バージョンを設定します。
    	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
    	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// バケット名を指定します。例:examplebucket。
    	bucketName := "examplebucket"
    	// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。
    	objectName := "exampledir/exampleobject.txt"
    
    	// バケットを取得します。
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// 各オブジェクトタグのキーと値を指定します。たとえば、キーを owner、値を 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
    	// 追加可能なオブジェクトに初めてデータを追加します。最初の AppendObject 呼び出しで設定したタグが有効になります。後続の AppendObject 呼び出しで設定したタグは有効になりません。
    	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)
    	}
    	// 2 回目のデータ追加。
    	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))
    }
    
  • 再開可能なアップロード中のオブジェクトタグの追加

    以下に、ローカルファイルの再開可能なアップロードを実行する際にオブジェクトタグを追加するコード例を示します。

    package main
    
    import (
    	"fmt"
    	"os"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    func main() {
    	// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
    	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	// OSSClient インスタンスを作成します。
    	// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを指定してください。
    	// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを指定してください。
    	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
    	clientOptions = append(clientOptions, oss.Region("yourRegion"))
    	// 署名バージョンを設定します。
    	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
    	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// バケット名を指定します。例:examplebucket。
    	bucketName := "examplebucket"
    	// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。
    	objectName := "exampledir/exampleobject.txt"
    	// ローカルファイルの完全なパスを指定します。例:D:\\localpath\\examplefile.txt。
    	// examplefile.txt のようにファイル名のみを指定した場合、サンプルプログラムを含むプロジェクトのローカルパスからファイルがアップロードされます。
    	fileName := "D:\\localpath\\examplefile.txt"
    
    	// バケットを取得します。
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// 各オブジェクトタグのキーと値を指定します。たとえば、キーを owner、値を John に設定します。
    	tag1 := oss.Tag{
    		Key:   "owner",
    		Value: "John",
    	}
    	tag2 := oss.Tag{
    		Key:   "type",
    		Value: "document",
    	}
    	tagging := oss.Tagging{
    		Tags: []oss.Tag{tag1, tag2},
    	}
    
    	// ファイルを複数のパートに分割します。各パートのサイズを 100 KB に設定します。3 つのコルーチンを使用してパートを同時にアップロードし、オブジェクトタグを設定します。
    	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))
    }
    

アップロード済みオブジェクトのオブジェクトタグの追加または変更

オブジェクトのアップロード時にオブジェクトタグを追加しなかった場合、または既存のタグが要件を満たさない場合は、アップロード後にオブジェクトタグを追加または変更できます。

以下に、アップロード済みオブジェクトのオブジェクトタグを追加または変更するコード例を示します。

package main

import (
	"fmt"
	"os"

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

func main() {
	// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// OSSClient インスタンスを作成します。
	// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを指定してください。
	// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを指定してください。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// 署名バージョンを設定します。
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// バケット名を指定します。例:examplebucket。
	bucketName := "examplebucket"
	// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。
	objectName := "exampledir/exampleobject.txt"

	// バケットを取得します。
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// 各オブジェクトタグのキーと値を指定します。たとえば、キーを owner、値を 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.PutObjectTagging(objectName, tagging)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	fmt.Println(bucket.GetObjectTagging(objectName))
}

オブジェクトの特定バージョンのオブジェクトタグの追加または変更

バージョン管理が有効なバケットでは、バージョン ID を指定することで、オブジェクトの特定バージョンのオブジェクトタグを追加または変更できます。

以下に、オブジェクトの特定バージョンのオブジェクトタグを追加または変更するコード例を示します。

説明

バージョン ID の取得方法の詳細については、「オブジェクトのリスト表示 (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() {
	// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// OSSClient インスタンスを作成します。
	// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを指定してください。
	// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを指定してください。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// 署名バージョンを設定します。
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// バケット名を指定します。例:examplebucket。
	bucketName := "examplebucket"
	// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。
	objectName := "exampledir/exampleobject.txt"
	// オブジェクトのバージョン ID を指定します。
	versionId := "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****"

	// バケットを取得します。
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		HandleError(err)
	}
	// 各オブジェクトタグのキーと値を指定します。たとえば、キーを owner、値を 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.PutObjectTagging(objectName, tagging, oss.VersionId(versionId))

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

オブジェクトのコピー時のオブジェクトタグの設定

オブジェクトをコピーする際、宛先オブジェクトのタグをどのように設定するかを指定できます。有効な値は次のとおりです:

  • Copy (デフォルト):ソースオブジェクトから宛先オブジェクトにタグをコピーします。

  • Replace:ソースオブジェクトのタグを無視し、リクエストで指定されたタグを宛先オブジェクトに適用します。

以下の例は、オブジェクトのコピー時にオブジェクトタグを設定する方法を示しています。1 GB 未満のオブジェクトにはシンプルコピーが使用され、1 GB を超えるオブジェクトにはマルチパートコピーが使用されます。

  • シンプルコピー時のオブジェクトタグの設定

    以下に、1 GB 未満のオブジェクトのシンプルコピーを実行する際にオブジェクトタグを設定するコード例を示します。

    package main
    
    import (
    	"fmt"
    	"os"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    func main() {
    	// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
    	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	// OSSClient インスタンスを作成します。
    	// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを指定してください。
    	// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを指定してください。
    	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
    	clientOptions = append(clientOptions, oss.Region("yourRegion"))
    	// 署名バージョンを設定します。
    	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
    	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// バケット名を指定します。例:examplebucket。
    	bucketName := "examplebucket"
    	// ソースオブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:srcexampledir/exampleobject.txt。
    	srcObjectName := "srcexampledir/exampleobject.txt"
    	// 宛先オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:destexampledir1/exampleobject.txt。
    	destObjectName1 := "destexampledir1/exampleobject.txt"
    	// 宛先オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:destexampledir2/exampleobject.txt。
    	destObjectName2 := "destexampledir2/exampleobject.txt"
    
    	// バケットを取得します。
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// 各オブジェクトタグのキーと値を指定します。たとえば、キーを owner、値を John に設定します。
    	tag1 := oss.Tag{
    		Key:   "owner",
    		Value: "John",
    	}
    	tag2 := oss.Tag{
    		Key:   "type",
    		Value: "document",
    	}
    	tagging := oss.Tagging{
    		Tags: []oss.Tag{tag1, tag2},
    	}
    
    	// オブジェクトをコピーする際、tagging パラメーターのみを設定した場合、オブジェクトタグは有効になりません。
    	_, err = bucket.CopyObject(srcObjectName, destObjectName1, oss.SetTagging(tagging))
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// オブジェクトをコピーする際、オブジェクトタグを有効にするには、TaggingReplace と tagging の両方のパラメーターを設定する必要があります。
    	_, 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))
    }
    
  • マルチパートコピー時のオブジェクトタグの設定

    以下に、1 GB を超えるオブジェクトのマルチパートコピーを実行する際にオブジェクトタグを設定するコード例を示します。

    package main
    
    import (
    	"fmt"
    	"os"
    	"strings"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    func main() {
    	// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
    	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	// OSSClient インスタンスを作成します。
    	// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを指定してください。
    	// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを指定してください。
    	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
    	clientOptions = append(clientOptions, oss.Region("yourRegion"))
    	// 署名バージョンを設定します。
    	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
    	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// バケット名を指定します。例:examplebucket。
    	bucketName := "examplebucket"
    	// ソースオブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:srcexampledir/exampleobject.txt。
    	srcObjectName := "srcexampledir/exampleobject.txt"
    	// 宛先オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:destexampledir/exampleobject.txt。
    	destObjectName := "destexampledir/exampleobject.txt"
    
    	// バケットを取得します。
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// 各オブジェクトタグのキーと値を指定します。たとえば、キーを owner、値を John に設定します。
    	tag1 := oss.Tag{
    		Key:   "owner",
    		Value: "John",
    	}
    	tag2 := oss.Tag{
    		Key:   "type",
    		Value: "document",
    	}
    	tagging := oss.Tagging{
    		Tags: []oss.Tag{tag1, tag2},
    	}
    
    	// マルチパートコピー用のオブジェクトをアップロードします。
    	content := "this your object value"
    	err = bucket.PutObject(srcObjectName, strings.NewReader(content))
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    
    	// マルチパートアップロードを初期化し、オブジェクトタグを設定します。
    	imur, err := bucket.InitiateMultipartUpload(destObjectName, oss.SetTagging(tagging))
    	if err != nil {
    		fmt.Println("Error:", err)
    		os.Exit(-1)
    	}
    	// オブジェクトを 1 つのパートに分割してアップロードします。
    	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))
    }
    

シンボリックリンクのタグの設定

以下に、シンボリックリンクのタグを設定するコード例を示します。

package main

import (
	"fmt"
	"os"
	"strings"

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

func main() {
	// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// OSSClient インスタンスを作成します。
	// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを指定してください。
	// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを指定してください。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// 署名バージョンを設定します。
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// バケット名を指定します。例:examplebucket。
	bucketName := "examplebucket"
	// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。
	objectName := "exampledir/exampleobject.txt"
	// シンボリックリンクの完全なパスを指定します。例:shortcut/myobject.txt。
	symlinkName := "shortcut/myobject.txt"

	// バケットを取得します。
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// 各オブジェクトタグのキーと値を指定します。たとえば、キーを owner、値を 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))
}