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

Object Storage Service:シンボリックリンクの管理 (Go SDK V2)

最終更新日:Nov 09, 2025

シンボリックリンクは、Windows のショートカットと同様に、バケット内で頻繁に使用されるファイルにアクセスするための便利な方法を提供します。このトピックでは、OSS SDK for Go を使用してシンボリックリンクを作成および取得する方法について説明します。

注記

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

  • このトピックの例では、環境変数から読み取られたアクセス資格情報を使用する方法を示します。アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。

  • シンボリックリンクを作成するには、oss:PutObject 権限が必要です。シンボリックリンクを取得するには、oss:GetObject 権限が必要です。詳細については、「RAM ユーザーへのカスタムアクセスポリシーの付与」をご参照ください。

メソッド定義

シンボリックリンクの作成

func (c *Client) PutSymlink(ctx context.Context, request *PutSymlinkRequest, optFns ...func(*Options)) (*PutSymlinkResult, error)

シンボリックリンクの取得

func (c *Client) GetSymlink(ctx context.Context, request *GetSymlinkRequest, optFns ...func(*Options)) (*GetSymlinkResult, error)

リクエストパラメーター

パラメーター

タイプ

説明

ctx

context.Context

リクエストのコンテキスト。このパラメーターを使用して、リクエストの合計時間制限を設定できます。

request

*PutSymlinkRequest

シンボリックリンクを作成する API 操作のリクエストパラメーター。詳細については、「PutSymlinkRequest」をご参照ください。

*GetSymlinkRequest

シンボリックリンクを取得する API 操作のリクエストパラメーター。詳細については、「GetSymlinkRequest」をご参照ください。

optFns

...func(*Options)

(オプション) 操作レベルの構成パラメーター。詳細については、「Options」をご参照ください。

戻り値

戻り値

タイプ

説明

result

*PutSymlinkResult

シンボリックリンクを作成する API 操作の戻り値。このパラメーターは、err が nil の場合に有効です。詳細については、「RestoreObjectResult」をご参照ください。

*GetSymlinkResult

シンボリックリンクを取得する API 操作の戻り値。このパラメーターは、err が nil の場合に有効です。詳細については、「GetSymlinkResult」をご参照ください。

err

error

リクエストのステータス。リクエストが失敗した場合、err の値は nil ではありません。

サンプルコード

シンボリックリンクの作成

次のコードを使用して、シンボリックリンクを作成できます。

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 // リージョン。
	bucketName string // バケット名。
	objectName string // オブジェクト名。
)

// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
	flag.StringVar(&objectName, "object", "", "オブジェクトの名前。")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// シンボリックリンクの名前を定義します。
	var (
		symlinkName = "testsymlink" // シンボリックリンクの名前。
	)

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// オブジェクト名が空かどうかを確認します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// シンボリックリンクの名前が空かどうかを確認します。
	if len(symlinkName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, symlink name required")
	}

	// デフォルトの構成をロードし、資格情報プロバイダーとリージョンを設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// シンボリックリンクを設定するリクエストを作成します。
	putRequest := &oss.PutSymlinkRequest{
		Bucket: oss.Ptr(bucketName),  // バケット名。
		Key:    oss.Ptr(symlinkName), // シンボリックリンクの名前を指定します。
		Target: oss.Ptr(objectName),  // シンボリックリンクが指すオブジェクトファイルの名前を指定します。
	}

	// シンボリックリンクを設定するリクエストを実行します。
	putResult, err := client.PutSymlink(context.TODO(), putRequest)
	if err != nil {
		log.Fatalf("failed to put symlink %v", err)
	}

	// シンボリックリンクの設定結果を出力します。
	log.Printf("put symlink result:%#v\n", putResult)
}

シンボリックリンクの取得

次のコードを使用して、シンボリックリンクとそれが指すオブジェクトファイルの名前を取得できます。

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 // リージョン。
	bucketName  string // バケット名。
	symlinkName string // シンボリックリンクの名前。
)

// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
	flag.StringVar(&symlinkName, "symlink", "", "シンボリックリンクの名前。")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// シンボリックリンクの名前が空かどうかを確認します。
	if len(symlinkName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, symlink name required")
	}

	// デフォルトの構成をロードし、資格情報プロバイダーとリージョンを設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// シンボリックリンクを取得するリクエストを作成します。
	getRequest := &oss.GetSymlinkRequest{
		Bucket: oss.Ptr(bucketName),  // バケット名。
		Key:    oss.Ptr(symlinkName), // シンボリックリンクの名前。
	}

	// シンボリックリンクを取得する操作を実行し、結果を処理します。
	getResult, err := client.GetSymlink(context.TODO(), getRequest)
	if err != nil {
		log.Fatalf("failed to get symlink %v", err)
	}

	// シンボリックリンクが指すオブジェクトファイルの名前を出力します。
	log.Printf("get symlink target object name:%#v\n", *getResult.Target)
}

関連情報

  • シンボリックリンクの完全なサンプルコードについては、GitHub の例「put_symlink.go」および「get_symlink.go」をご参照ください。

  • シンボリックリンクの操作の詳細については、「シンボリックリンク」をご参照ください。

  • シンボリックリンクを作成するために呼び出すことができる API 操作の詳細については、「PutSymlink」をご参照ください。

  • シンボリックリンクを取得するために呼び出すことができる API 操作の詳細については、「GetSymlink」をご参照ください。