GAE+GO+Echoでgo1.11に対応した。
実はほとんど変更する箇所がないけれど最初のサーバー起動のところだけハマったのでメモ的に。
echoのバージョンは v3.3.10 で対応しています。
Echo公式のGAEへの対応方法はApp Engine Standard Go 1.9までのもので特に更新されてないっぽかった。
https://echo.labstack.com/cookbook/google-app-engine
ただ、上記のやり方でも動くしApp Engine APIを使い続ける場合もそのままで良い。
しかし、今回やりたかったのはApp Engine APIからの脱却。
簡単に言うと最後の
appengine.Main()
を外したい。
で、大したことじゃないので結論。
Go1.11からはgo標準のhttp.ListenAndServeで起動できるようになったので、こいつを使うだけで良い。
具体的には公式のコードのappengine.Main() の部分をhttp.ListenAndServe()にするだけ。
package main
import (
"fmt"
"log"
"net/http"
"os"
"github.com/labstack/echo"
)
func createMux() *echo.Echo {
e := echo.New()
return e
}
func main() {
//この辺は相変わらず必要
e := echo.New()
http.Handle("/", e)
//ここから追加
port := os.Getenv("PORT")
if port == "" {
port = "8080"
log.Printf("Defaulting to port %s", port)
}
log.Printf("Listening on port %s", port)
//この部分で起動
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
}
仕組みを理解してる人にとっては当然やんって感じかもしれないですね。
余談ですがFirestoreもGAEから使っていたのをFirebaseのものに変更しました。と言っても、FiresotreってGCPからアクセスしてもFirebaseからアクセスしても同じものを使ってるようでFirebaseの画面から連携処理をしたらそのまま同じデータが見れました。コードも少し書き換えるだけでできたので以前書いた記事に加筆するか新しい記事書くかも。