在Golang中使用Google Cloud Platform中的存储桶

问题描述:

I'm trying to host a Go app on the Google Cloud Platform and I need it to do some file writing. GCP doesn't let you do file writing directly in the App Engine, but requires you to use a Bucket.

From their documentation, you can access the buckets in PHP like so

$default_bucket = CloudStorageTools::getDefaultGoogleStorageBucketName();
$fp = fopen("gs://${default_bucket}/hello_default_stream.txt", 'w');
fwrite($fp, $newFileContent);
fclose($fp);

Is there a Golang equivalent for this?

我正在尝试在Google Cloud Platform上托管Go应用,并且我需要它来做一些文件编写。 GCP不允许您直接在App Engine中进行文件写入,而是要求您使用存储桶。 p>

从他们的文档中,您可以像这样 p>访问PHP中的存储桶 p >

  $ default_bucket = CloudStorageTools :: getDefaultGoogleStorageBucketName(); 
 $ fp = fopen(“ gs:// $ {default_bucket} /hello_default_stream.txt”,'w'); 
fwrite  ($ fp,$ newFileContent); 
fclose($ fp); 
  code>  pre> 
 
 

是否有与之对应的Golang语言? p> div>

As shared by Daz on the first comment, there's an intro on how to do this on the docs for Standard. This uses the cloud.google.com/go/storage library, although you could also use the superseded google.golang.org/appengine/blobstore (as also explained in the docs).

With those docs, you could simplify them until you get the following code (tested it and works as expected):

package minimal_gcs

import (
        s "cloud.google.com/go/storage"
        a "google.golang.org/appengine"
        h "net/http"
)

func init() {
        h.HandleFunc("/", func(w h.ResponseWriter, r *h.Request) {
                cx := a.NewContext(r)
                c, _ := s.NewClient(cx)
                wr := c.Bucket("<bucket_id>").Object("<object_id>").NewWriter(cx)
                _, _ = wr.Write([]byte("Hello World!!1"))
                _ = wr.Close()
        })
}

Note that this is really bad code (no error handling, ...), but I think it's useful to show the basic steps to handle GCS files within GAE standard using Go.