LoginSignup
7
4

More than 5 years have passed since last update.

Google Cloud Functions で Go を使おう!2

Last updated at Posted at 2018-07-19

注意

今 Google Cloud Functions (GCF) はまだベータで、まだアメリカしか使えなくて、まだNodeJSしか使えませんから、将来にいつかこの方法を使えなくなるかもしれませんが、やってみよう!

序説

半年くらい前に、Go で Google の Function as a Service を使うことを書きましたけど、ウェブのトリガーしか使えませんでした。でも、ついに、私の PR が受け取られました!

もし前の記事を読まなかったら、是非このリンクをクリックして読んできてください。

さて、すぐコードを見てみよう!

コード

新しいことはプロジェクト内の events のサブパッケージです。

main.go でインポートすると Storage Bucket や PubSub Topic のトリガーを使えます。

import "./events"

それから、ウェブリクエストのように準備します。

// Storage Bucket のトリガー
http.HandleFunc(nodego.BucketTrigger, events.Handler(func(event events.Event) error {
    obj, err := event.StorageObject()
    if err != nil {
        return err
    }

    nodego.InfoLogger.Printf("%s は最後に %s に更新されました。", obj.Name, obj.Updated)

    return nil
}))

// PubSub Topic のトリガー
http.HandleFunc(nodego.PubSubTrigger, events.Handler(func(event *events.Event) error {
    msg, err := event.PubSubMessage()
    if err != nil {
        return err
    }

    nodego.InfoLogger.Printf("メッセージは: %s", msg.Data)

    return nil
}))

// カスタムのパース方法
http.HandleFunc("/", events.Handler(func(event *events.Event) error {
    // event.Data は `[]byte` から何でもパースできます。

    // 例:
    var obj SomeStruct
    if err := json.Unmarshal(event.Data, &obj); err != nil {
        return err
    }

    // 何とか obj を使う

    return nil
}))

完成の例は examples のフォルダーに入っています。

それで、前の記事のステップ通りにテストやデプロイします。

まとめ

今、うちの会社は半年以上幾ファンクションも Go で書いて GCF にデプロイされています。コードの速さは確かに NodeJS のほうが速いけど、ランタイムの速さは Go が NodeJS に絶対に負けません。

何か問題があったら、コメントで入れてください。

終わり

Thanks for reading!

読んでくれてありがとう!

7
4
0

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
7
4