Go on Google App Engineまとめ
Google App Engine(GAE)のバージョンアップ(1.5.0)Golangが実験的に使えるようになったのはまぁニュースのとおりですが、電車が暇だったのでドキュメントを読みました。
で、まとめました。
対応して何が嬉しいか
Golang on GAEの特徴
- GAE特有の機能はパッケージ化して提供
- DatastoreとかUsersとか
- Goっぽく再設計されているらしい
- httpのハンドリング自体は、標準ライブラリ群のhttpパッケージ使う
- 自然でとってもいいと思った。
- ちなみにhttpパッケージは他の鯖ソフトと比べても性能良いらしいし。
GAE上での特有の制限
- unsafeとsyscall使えない
- 正直どうでもいい、というか使えなくて当然かもね。。
- でもunsafeの使用禁止は、もしかするとライブラリの制限に制限が出てくるかも?
- goroutineが使えない。
- 正確には、「使えない」じゃなくてスケールしないってことらしい。
- ゴルーチンが含まれたコードは並列動作はするが、マルチスレッドにはならないっぽい。使用出来る仮想コア数が1つに制限されている。
- そういえば、ローカルでgolang書いてもMAXPROCSを設定しなければならそうなっちゃう仕様だったような。
- ローカルファイル触れない
- Datastoreとか使ってね
- os.Open()は、叩けるけれどos.EINVALが返されるらしい。
使うには
実際のコードどうよ?
- コードの特徴は?
- main.mainが無い。
- パッケージ名はmain以外なら自由、ただし、アプリ名とは合わせないといけないのかな?
- mainはGAEのシステムが使っているっぽい。
- エントリポイントは関数init()、ここでhttp.HandleFunc()を呼んでリクエストのハンドリング。
- その他は特に普通。
- main.mainが無い。