最近Goが気になっている
- 転職したことにより appengine を仕事で触ることがなくなった一方で、appengine 愛は深まるばかり(なぜか)
- 一年近くメンテできてなかった appengine アプリをメンテし始めたり
- それと、少し前に appengine が modules をリリース
- 細かいところはまだ使ってないからわからないけど、例えば、メイン言語として Java で appengine アプリを書いていても、別バージョン(module)として Go で書いた appengine アプリをデプロイして利用できる・・・的な?
- これを使えば、特にレスポンス速度が必要な機能に関してだけはGoで書く、とかができる?
- で、ちょうど自分のアプリでも遅っい機能がある
- 自分の観測範囲内でも Go の盛り上がりをひしひしと感じている
- ということで、Go を appengine で始めてみることにした
まずはGo言語そのものから
- GoTourJP をさらっと流す。
- 58くらいまでやった
- あんまり直感的な文法ではないと感じたかな・・・、、でもまぁ、慣れかな?
- そして Go のインストール
$ brew install go
- 組み込みパッケージの一覧の確認
- まだよくわからんので、 golang.org あたりを見てみたり
- GOPATH の設定をしておく
- エディタには sublime text を使おうと思っているので、GoSublime を入れておく
ここらへんで飽きてきた
- ので、とにかく「動く」「Webなもの」を作ってみながらやらないとヤバイ
- ので、the Go Getting Started Guide - Google App Engine をやってみる
- Python 2.7.x 以上が必要とのこと
- 入ってた
- SDK をDL
- GOPATH に展開しといた
- 展開してできたディレクトリを PATH 通しておく
- 準備おわり。Hello World
- 続いて Using the Users Service
- お次は Handling Forms
- html/template パッケージはいまいちよくわからんな。。
- サーバーサイドで html を組み立てて返すようなことはあんまりしないだろうけど
- html/template パッケージはいまいちよくわからんな。。
- そしてようやく Using the Datastore 。待ってました!
- incompleteKey・・・ってなんだっけ
- Datastore reference 読んでみる
- It is valid to create a key with a zero StringID and a zero IntID; this is called an incomplete key, and does not refer to any saved entity. Putting an entity into the datastore under an incomplete key will cause a unique key to be generated for that entity, with a non-zero IntID.・・・とある
- キーの生成時にキー値を指定せずにユニークなキーを生成するために使うもの・自動採番キーみたいなもの?・・・って感じか
- 参考
- NewKey の方はStringIDかintIDのどちらか、もしくは両方を指定する必要がある
- どちらも指定しなければ、それはincompleteKeyとなる
- datastore#NewIncompleteKey の3番目の引数はparentKey。この例では、entity取得時にancestor queryを発行するために、newKeyで作成した親キーを指定しておいてる
- Datastore に put する、slim3 でいうところの Model は Go struct で
- 必ずしも struct にしなくてもいいのかな?
- incompleteKey・・・ってなんだっけ
- 最後に
Uploading Your Application
でデプロイ$ goapp deploy .
- デプロイできたよー
- 爆速を期待してたんだけど・・・、、
すんげぇ遅ぇ!・・・作りのせいかな?- queryの発行だったりhtmlの出力だったり?
- (2013/12/06 追記)ご指摘を頂き、日を改めてアクセスしてみたら別に普通のパフォーマンスでした
- その時だけ、他の何らかの要因があったのか、もしくは私の環境周りが不調だったのかもしれません
- サーバサイドのレスポンスタイムは数十msec〜100msec弱でした
- Python 2.7.x 以上が必要とのこと
とりあえずGoの環境とappengineへのデプロイまではできた!
次は、既存のGAE/JアプリにGoのmodulesをデプロイしてみて、Javaでputされたデータの取得とか、あといろいろ、ごにょごにょやってみるつもり。 今回のコード(といっても、チュートリアルのコードほぼそのままだけど)は、こちら。