Go on Google App Engineまとめ

Google App Engine(GAE)のバージョンアップ(1.5.0)Golangが実験的に使えるようになったのはまぁニュースのとおりですが、電車が暇だったのでドキュメントを読みました。

で、まとめました。

対応して何が嬉しいか

Golang on GAEの特徴

  • GAE特有の機能はパッケージ化して提供
    • DatastoreとかUsersとか
    • Goっぽく再設計されているらしい
  • httpのハンドリング自体は、標準ライブラリ群のhttpパッケージ使う
    • 自然でとってもいいと思った。
    • ちなみにhttpパッケージは他の鯖ソフトと比べても性能良いらしいし。
  • その他、app.yamlとかはPythonの形式を踏襲。

GAE上での特有の制限

  • unsafeとsyscall使えない
    • 正直どうでもいい、というか使えなくて当然かもね。。
    • でもunsafeの使用禁止は、もしかするとライブラリの制限に制限が出てくるかも?
  • goroutineが使えない。
    • 正確には、「使えない」じゃなくてスケールしないってことらしい。
    • ゴルーチンが含まれたコードは並列動作はするが、マルチスレッドにはならないっぽい。使用出来る仮想コア数が1つに制限されている。
      • そういえば、ローカルでgolang書いてもMAXPROCSを設定しなければならそうなっちゃう仕様だったような。
  • ローカルファイル触れない
    • Datastoreとか使ってね
    • os.Open()は、叩けるけれどos.EINVALが返されるらしい。

使うには

実際のコードどうよ?

  • サンプルコード見れるの?
  • コードの特徴は?
    • main.mainが無い。
      • パッケージ名はmain以外なら自由、ただし、アプリ名とは合わせないといけないのかな?
    • mainはGAEのシステムが使っているっぽい。
      • エントリポイントは関数init()、ここでhttp.HandleFunc()を呼んでリクエストのハンドリング。
    • その他は特に普通。