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

Object Storage Service:OSS SDK for Go のクイックスタート

最終更新日:Feb 28, 2026

OSS SDK for Go をインストールし、アクセス認証情報を設定して、バケットの作成、オブジェクトのアップロード・ダウンロード・一覧表示・削除といった基本操作を実行します。

前提条件

開始する前に、以下の準備が整っていることを確認してください。

  • Object Storage Service (OSS) が有効化された Alibaba Cloud アカウント

  • AccessKey ペアを持つ Resource Access Management (RAM) ユーザー。詳細については、「CreateAccessKey」をご参照ください。

  • Go がインストール済みであること

Go のインストール状況を確認します。

go version

手順 1:SDK のインストール

Go モジュールを初期化し、OSS SDK for Go をインストールします。

go mod init oss-quickstart
go get github.com/aliyun/aliyun-oss-go-sdk/oss

手順 2:アクセス認証情報の設定

RAM ユーザーの AccessKey ペアを環境変数として設定します。

重要

ソースコードに AccessKey 認証情報をハードコードしてはいけません。誤って公開されるのを防ぐために、環境変数または他の安全な方法を使用してください。認証情報のオプションの詳細については、「アクセス認証情報の設定」をご参照ください。

macOS/Linux

export OSS_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
export OSS_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>

Windows

set OSS_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
set OSS_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>

手順 3:コード例の実行

このプログラムは、バケットを作成し、オブジェクトをアップロードしてダウンロードし、バケット内のオブジェクトを一覧表示し、最後にオブジェクトを削除します。

  1. プロジェクトディレクトリに main.go という名前のファイルを作成します。

package main

import (
	"log"

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

// ヘルパー関数間で共有されるグローバルクライアント。
var client *oss.Client

func main() {
	// 実際の値に置き換えてください。
	bucketName := "yourBucketName"
	endpoint := "yourEndpoint"         // 例: https://oss-cn-hangzhou.aliyuncs.com
	region := "yourRegion"             // 例: cn-hangzhou

	// 環境変数から認証情報を読み込みます。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Error: %v", err)
	}

	// AuthV4 署名を使用してクライアントを作成します。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region(region))
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err = oss.New(endpoint, "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Error: %v", err)
	}
	log.Printf("Client: %#v\n", client)

	// バケットを作成します。
	if err := createBucket(bucketName); err != nil {
		log.Fatalf("Error: %v", err)
	}

	// オブジェクトをアップロードします。
	objectName := "file.txt"
	localFileName := "/path/to/local/file.txt"
	if err := uploadFile(bucketName, objectName, localFileName); err != nil {
		log.Fatalf("Error: %v", err)
	}

	// オブジェクトをダウンロードします。
	downloadedFileName := "/path/to/downloaded/file.txt"
	if err := downloadFile(bucketName, objectName, downloadedFileName); err != nil {
		log.Fatalf("Error: %v", err)
	}

	// バケット内のオブジェクトを一覧表示します。
	if err := listObjects(bucketName); err != nil {
		log.Fatalf("Error: %v", err)
	}

	// オブジェクトを削除します。
	if err := deleteObject(bucketName, objectName); err != nil {
		log.Fatalf("Error: %v", err)
	}
}

func createBucket(bucketName string) error {
	err := client.CreateBucket(bucketName)
	if err != nil {
		return err
	}
	log.Printf("Bucket created successfully: %s", bucketName)
	return nil
}

func uploadFile(bucketName, objectName, localFileName string) error {
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		return err
	}
	err = bucket.PutObjectFromFile(objectName, localFileName)
	if err != nil {
		return err
	}
	log.Printf("File uploaded successfully to %s/%s", bucketName, objectName)
	return nil
}

func downloadFile(bucketName, objectName, downloadedFileName string) error {
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		return err
	}
	err = bucket.GetObjectToFile(objectName, downloadedFileName)
	if err != nil {
		return err
	}
	log.Printf("File downloaded successfully to %s", downloadedFileName)
	return nil
}

func listObjects(bucketName string) error {
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		return err
	}
	// ListObjects はデフォルトで 1 回のリクエストにつき最大 100 個のオブジェクトを返します。
	marker := ""
	for {
		lsRes, err := bucket.ListObjects(oss.Marker(marker))
		if err != nil {
			return err
		}
		for _, object := range lsRes.Objects {
			log.Printf("Object: %s", object.Key)
		}
		if !lsRes.IsTruncated {
			break
		}
		marker = lsRes.NextMarker
	}
	return nil
}

func deleteObject(bucketName, objectName string) error {
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		return err
	}
	err = bucket.DeleteObject(objectName)
	if err != nil {
		return err
	}
	log.Printf("Object deleted successfully: %s/%s", bucketName, objectName)
	return nil
}
  1. main.go 内のプレースホルダー値を実際の値に置き換えます。

    プレースホルダー説明
    yourBucketNameご利用の OSS バケット名my-go-demo-bucket
    yourEndpointバケットが配置されているリージョンのエンドポイントhttps://oss-cn-hangzhou.aliyuncs.com
    yourRegionバケットが配置されているリージョン IDcn-hangzhou
    /path/to/local/file.txtアップロードするローカルファイルのパス/tmp/file.txt
    /path/to/downloaded/file.txtダウンロードしたオブジェクトを保存するパス/tmp/downloaded-file.txt
  2. プログラムを実行します。

    go run main.go

    期待される出力結果は以下のとおりです。

    Client: &oss.Client{...}
    Bucket created successfully: my-go-demo-bucket
    File uploaded successfully to my-go-demo-bucket/file.txt
    File downloaded successfully to /tmp/downloaded-file.txt
    Object: file.txt
    Object deleted successfully: my-go-demo-bucket/file.txt

クリーンアップ

テスト後、不要な料金を避けるために、OSS コンソールから、または次のコードを追加してバケットを削除してください。

err := client.DeleteBucket(bucketName)
if err != nil {
    log.Fatalf("Error: %v", err)
}
log.Printf("Bucket deleted: %s", bucketName)
説明 バケットは空である必要があります。すべてのオブジェクトおよび未完了のマルチパートアップロードを事前に削除してください。

参考