Appengine/goが過渡期とでもいいましょうか、
日々変化も目まぐるしく、いろいろ気をつけるべき点もありそうなので雑にまとめました。
ご参考まで。(2019/09/10現在)
GAE/go 1.9 は終わり
画像のとおりです。
警告: Go 1.9 ランタイム バージョンは非推奨になりました。2019 年 10 月 1 日以降、新しいデプロイではこのバージョンを使用できなくなります。2019 年 10 月 1 日までに、Go 1.11 または Go 1.12 を使用するようにアプリケーションをアップグレードしてください。
とあるので、今年の10月1日以降はgo1.9でのデプロイは不可能になります。
すでにデプロイしているものは動くんじゃないか(未確認)と思いますが、速やかに移行しましょう。
go1.11 への移行は比較的容易だと思います。(appengineパッケージも利用できるので)
追記: すでにデプロイされているバージョンは引き続き利用できるようです。 [1]
GAE/go 1.11 は気をつけろ
個人的に気になる点は3点、
ランタイムのパフォーマンスに関しては、レスポンスの時間などは特に差を感じませんが、
CPUの利用量とメモリの使用量の増加があるように感じています。
Stackdriverのグラフで見た感じで2-3割り程度の差があるように見えます。(ざっくり
非appengineパッケージ(cloud.google.com/go/datastore など)を利用した際に今日現在でRPC部分にメモリリークする箇所がありそうです。
そのため、appengineパッケージをあえて利用することで問題を回避できます。(ですが次の問題があります)
appengineパッケージのRPCに関しては、2nd-genランタイムは多くのRPCを実行しているようで、比較的頻繁にタイムアウトするケースがあります。
service bridge HTTP failed
などのログが出力される場合には internal/net.go の以下の画像の箇所のtimeoutを伸ばしてあげると良いようです。(現在修正し様子を見ようとしているところです)
GAE/go 1.12 はまだよくわかりません
一応(?)1.12対応で実装しているものありますが、app.yamlで1.11の設定でデプロイしているので厳密にはよくわかっていません。(1.11と違いがないかもしれません。)
注意点としては、↑のgo1.11でも書いたメモリリークの問題は1.12ランタイムではappengineパッケージが利用不可になっているため、現状、回避策がないと思います。
大量にRPCを実行しているような場合にはインスタンスタイプを上げるなどして神に祈る必要がありそうです。
まとめ
1.9からの移行を皆様急いでいるかと思いますが、ライブラリ併せてのupdateは若干罠があるので(今日 2019/09/10 現在)、
一旦 GAE/go1.11 環境に appengine ライブラリを利用したままの移行が今日現在、私のオススメの予感です。
おまけ
[1] Feature Deprecations | App Engine Documentation | Google Cloud