gae/goはSDKの中にgoそのものも内包しているため、GOROOTとGOPATHを切り替えてやる必要が出てきます。
shellで切り替えても良いのですが、環境を切り替えるためのtoolにgoenvがあるので、今回はこちらを使って環境を切り替えるやり方を紹介します。
goenv install
goenvのinstallは公式Documentに書いてある通りです。
projectを作る
goenvを利用してgae/go用のprojectを作ります。
$ goenv -gae -go /Users/sinmetal/bin/google-cloud-sdk/platform/google_appengine/goroot -deps /Users/sinmetal/go sample
Environment /Users/sinmetal/Documents/temp/sample created!sample created!
option
-gae
GAE用のproject作成を指示するために-gaeを設定します。
これにより、app.yamlを生成してくれます。
普通のgoのproject作る時は、指定する必要はありません。
-go
-goはGOROOTを独自設定にするためのものです。
gae/goはSDKにgoそのものを持っているので、ここで指定します。
gae/goではなく普通のgoのprojectを作る時は、goがinstallされているpathを指定します。
-deps
作業ディレクトリ以外のPATHをGOPATHに追加するオプションです。
GAEの場合go getしたライブラリを作業ディレクトリの中に置くとデプロイ時にbuildされてしまうため、作業ディレクトリの外にGOPATHを置きます。
-depsを使えば外に置いてあるGOPATHと作業ディレクトリを連結してGOPATHに設定してくれます。
成果物
GAE設定の場合、以下のようなdir構造ができあがります。
activateに設定が書き込まれています。
sample
├── activate
└── src
├── app.yaml
└── sample.go
ここまでで既にlocal serverは立ち上げることができます。
$ goapp serve sample/src/app.yaml
INFO 2014-12-20 08:38:43,540 devappserver2.py:745] Skipping SDK update check.
WARNING 2014-12-20 08:38:43,554 simple_search_stub.py:1115] Could not read search indexes from /var/folders/qt/n8vfptws13n9kgw4yddt4j8r0000gn/T/appengine.sample.sinmetal/search_indexes
INFO 2014-12-20 08:38:43,557 api_server.py:172] Starting API server at: http://localhost:59581
INFO 2014-12-20 08:38:43,561 dispatcher.py:186] Starting module "default" running at: http://localhost:8080
INFO 2014-12-20 08:38:43,564 admin_server.py:118] Starting admin server at: http://localhost:8000
goenv使い方
activateの適用と解除を実行すれば、projectに合わせて、
gae/goと普通のgoを切り替えることができます。
設定適用
source {activate path} を実行すれば、activateの内容に設定を書き換えてくれます。
$ source sample/activate
(go:sample) ╭─sinmetal@Aggron.local ~/Documents/temp
設定解除
deactivate を実行すれば、元の状態に戻ります。
$ deactivate
sinmetal@Aggron.local ~/Documents/temp