注意
今 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!
読んでくれてありがとう!