GAE/Goの基本的な設定の覚え書き
Go言語は昔(1.4まで?)はパッケージ管理の標準的な仕組みがなくて、1.7あたりでvendorディレクトリを必ず読むようになったらしい。 デファクトスタンダードは、今の所glideというものらしい。 godepsも良いみたいだけど、個人的に何となくglideの方が扱いやすく思えたので。
GOPATHを指定する必要があり、僕はautoenvを使う事にしたけど、何にせよこの後のプロセスを踏む前に必ず、作業ディレクトリがGOPATHに含まれてるようにする。
echo $GOPATH /Users/akn/go:/Users/akn/Documents/TimeCard/time-card-gae
普通の $PATH
と同様 :
で区切っていいらしい。
で、とにかくディレクトリ構造が肝心。僕はこんな風にした。(srcなしとかも試したけど、srcがないと上手く動作しなかった)
your-app-dir └── src ├── app.yaml ├── glide.lock ├── glide.yaml ├── main.go ├── server │ └── server.go └── vendor
主要なファイルの中身を晒しておく。
app.yaml
application: my-app version: 0 runtime: go api_version: go1 handlers: - url: /.* script: _go_app nobuild_files: - vendor skip_files: - vendor/.*$
main.go
package main import ( "server" ) func init() { server.Start() }
良く分かんないんだけど、main.goから直接vendor以下のを読みに行くと上手く行かなかったので、server packageを定義して、そっちから読むようにしてる。
あとは以下で開発
goapp serve
もしくはデプロイ
goapp deploy
これだと覚え書きすぎて分かりにくいので、丁寧めの記事へのリンクを貼っておきます。 ただし、僕は goenv を使って app/srcでディレクトリを分ける方法はCan’t findとか言われてライブラリが読まれず、上手く行かなかった。