🏝️
Go言語(golang)でGoogle Cloud Storageを操作する
はじめに
以前、書いたブログで JavaでGCS(Google Cloud Storage )のデータを操作する手順についてまとめましたが、今回はGo言語で操作する手順について調べてみました。
ファイルをアップロード
Bucketにファイルをアップロードします。
package main
import (
"context"
"fmt"
"io"
"log"
"os"
"cloud.google.com/go/storage"
"google.golang.org/api/option"
)
func main() {
bucketName := "bucket-name" // GCSバケット名
localFileName := "localfile.txt" // アップロードするファイルのパス
gcsFileName := "path/file.txt" // GCSバケットのアップロード先のパス
credentialsFile := "keyfile.json" // サービスアカウント鍵ファイルのパス
// Google Cloud Storageクライアントの作成
ctx := context.Background()
client, err := storage.NewClient(ctx, option.WithCredentialsFile(credentialsFile))
if err != nil {
log.Fatal(err)
}
// アップロードするファイルを開く
file, err := os.Open(localFileName)
if err != nil {
log.Fatal(err)
}
defer file.Close()
// バケットオブジェクトの作成
bucket := client.Bucket(bucketName)
// バケット内のアップロード先のオブジェクトを作成
obj := bucket.Object(gcsFileName)
// ファイルをアップロード
wc := obj.NewWriter(ctx)
if _, err := io.Copy(wc, file); err != nil {
log.Fatal(err)
}
if err := wc.Close(); err != nil {
log.Fatal(err)
}
fmt.Println("file upload success")
}
ファイルをダウンロード
Bucketからファイルをダウンロードします。
package main
import (
"context"
"fmt"
"log"
"os"
"cloud.google.com/go/storage"
"google.golang.org/api/option"
)
func main() {
bucketName := "bucket-name" // GCSバケット名
gcsFileName := "path/file.txt" // GCSバケットからダウンロードするファイルのパス
localFileName := "savefile.txt" // ダウンロードしたファイルの保存パス
credentialsFile := "keyfile.json" // サービスアカウント鍵ファイルのパス
// Google Cloud Storageクライアントの作成
ctx := context.Background()
client, err := storage.NewClient(ctx, option.WithCredentialsFile(credentialsFile))
if err != nil {
log.Fatal(err)
}
// バケットオブジェクトの作成
bucket := client.Bucket(bucketName)
// ファイルの作成
file, err := os.Create(localFileName)
if err != nil {
log.Fatal(err)
}
defer file.Close()
// バケットからオブジェクトをダウンロード
rc, err := bucket.Object(gcsFileName).NewReader(ctx)
if err != nil {
log.Fatal(err)
}
defer rc.Close()
// ファイルに出力
if _, err := file.ReadFrom(rc); err != nil {
log.Fatal(err)
}
fmt.Println("file download success")
}
ファイルの一覧表示
Bucket内のオブジェクトを一覧表示してアップロードされているファイルを確認します。
package main
import (
"context"
"fmt"
"log"
"cloud.google.com/go/storage"
"google.golang.org/api/iterator"
"google.golang.org/api/option"
)
func main() {
bucketName := "bucket-name" // GCSバケット名
credentialsFile := "keyfile.json" // サービスアカウント鍵ファイルのパス
// Google Cloud Storageクライアントの作成
ctx := context.Background()
client, err := storage.NewClient(ctx, option.WithCredentialsFile(credentialsFile))
if err != nil {
log.Fatal(err)
}
// バケットオブジェクトの作成
bucket := client.Bucket(bucketName)
// バケット内のオブジェクト一覧を取得
it := bucket.Objects(ctx, nil)
for {
attrs, err := it.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatal(err)
}
fmt.Println(attrs.Name)
}
}
まとめ
Go言語にあまり慣れていなかった為、書き方に少し戸惑いましたが、Go言語の方が処理がシンプルで短時間で作成することが出来ました。
Discussion