GAE/Goで、結構悩むのがディレクトリ構成です。 pkgをどう分けて、どこのディレクトリに何を置くか、自分はどうやってるか紹介します。
関連する記事はこのあたりです。
はじめに
- 基本的にはGOPATH以下にコードを置くことを想定しています。
以下の例では
$GOPATH/src/github.com/tjun/gaesample
とします。 - AppEngineは Go1.6 を利用している場合になります。1.8になると変わる部分があるかもしれません。
- echoでサーバを書いていますが、構成にはあまり影響がないと思います。
- vendoringはglideを使ってやってます
- goappコマンドはあまり使っていません
方針
ディレクトリ構成
以下のような感じでやってます。
$GOPATH/src/github.com/tjun/gaesample |-- main/ | |-- app.yaml | |-- index.yaml | |-- main.go # AppEngineのエントリポイント | `-- public/ # img, cssなど静的なファイル | |-- controllers/ # コントローラ |-- models/ # モデル |-- views/ # view |-- server/ # echoのサーバのエントリポイント |-- router/router.go # ルーティング ... # その他のpkgも直下に置く |-- vendor/ | |--Makefile |-- _deploys/ # デプロイスクリプト置き場 | ...
- クライアントのコードは省略していますが、ビルド時に
main/public
以下に持っていきます。
サーバをローカルで動かすときは
./dev_appserer.py main
で動かせます。 デプロイのときは、
./appcfg.py update main
になります。
この構成のいいところは、内部のpkgのimportが
import ( "github.com/tjun/gaesample/models" )
みたいな感じでわりと自然に書けることです。
GOPATH以下にコードを置いてると、CircleCIからのデプロイがそのままじゃできなかったりしますが、そのやり方はまた今度書きます。