LoginSignup
2
1

More than 5 years have passed since last update.

GAE/Go でGoogle Cloud Storageのフォルダ内のディスク容量を取得する

Last updated at Posted at 2017-01-07

表題の通り、Google App Engine上のGoアプリから
Google Cloud Storage上のあるフォルダ内のディスク容量を取得しようと思います。

まだ、GAE/Go初心者ですが、試してみたら色々とありましたのでメモしておきます。

storageを試す前に、Hello Worldなどチュートリアルを試して、
cloud shellを使っていましたが、storageを使う段階になって
cloud shellでデプロイできなくなりました。
出来ました。 参照

チュートリアルを試している時は、旧appengineパッケージを使っていて
go get もする事がなく、cloud shell上に必要なものが揃っています。

しかし、storageを使うには、 cloud.google.com/go/storage が必要になり
新appengine( google.golang.org/appengine )も必要になります。(多分)

本格的に開発していくためには、新appengineの方がいいと思うので移行しました。
移行の方法については、下記ページを参考にさせていただきました。
http://qiita.com/pside/items/72337bb5ac6571b238a4

そうして、新appengineに移行すると、 cloud shellは使えなくなります。(多分)
なので、 諦めてローカルPCからデプロイします。
(手間的には、そんなに変わらない気がします。)

そんなこんながあり、いよいよコードですが

import (
    "golang.org/x/net/context"

    "google.golang.org/appengine/log"
    "google.golang.org/api/iterator"
    "cloud.google.com/go/storage"
)

const bucketname = "hoge"

func GetUserItemSize(c context.Context, prefix string, size *int64) {
  client, err := storage.NewClient(c)
  if err != nil {
    log.Debugf(c, "Failed to get client: %v", err)
    return
  }

  var sum int64
  sum = 0
  query := &storage.Query{Prefix: prefix}
  bucket := client.Bucket(bucketname)
  it := bucket.Objects(c, query)
  for {
    obj, err := it.Next()
    if err == iterator.Done {
      break
    }
    if err != nil {
      log.Debugf("listBucket: unable to list bucket %s: %v", bucketName, err)
      return
    }
    log.Debugf(c, "objAttrs %v\n", obj)
    sum += obj.Size
  }
  *size = sum
}

こんな感じになりました。
もっといい方法があるとか、間違いがあれば教えてください。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1