vagrant-lxcにGo開発環境を作ったときのgvmはなぜかDockerコンテナにインストールできませんでした。
rbenvは仕方なくでしたが、Dockerコンテナ内で言語のバージョン管理が不要な気がするので、
apt-getでgolangをインストールします。また、Emacsのgo-modeもpackage.elでインストールします。
GOROOTとGOPATHはどうすればよいか悩んでいたところ、Single GOPATHを読んで参考にしました。
Dockerfile
Ubuntu14.04のapt-getでGo1.2.1がインストールされました。2014-05-29では1.2.2がstable、1.2.1は新しいほうです。
Dockerfileの環境変数の設定がいまひとつ分かないので、ENVで設定しました。
Goのインストールを、昨日までのDockerfileに追加します。
## Go |
init-loader.elとgo-mode
DockerホストのEmacsでgo-modeをM-x list-packages
からしてインストールします。
ELPAのパッケージをイメージにADDするため、作業ディレクトリのdotfilesにコピーします。
# cd ~/docker_apps/phusion |
dotfiles/initsディレクトリはこんな感じになりました。
$ tree -a dotfiles/.emacs.d/inits |
02-files.elでソフトタブ 4にしています。
(setq backup-inhibited t) |
Goのプログラムを書く場合、PythonやRubyと違うのでgo-mode設定をフックさせます。
- ソフトタブは使わない
- 4タブにする
- 保存の前にgofmtする
(add-hook 'go-mode-hook |
docker build & run
イメージの作成は、今回からタグでバージョン管理するようにしました。タグをつけると不要なイメージの削除が簡単になります。
コンテナは使い捨てで増えていくので、タグからどのバージョンで起動したか分かると便利です。
$ docker build -t masato/baseimage:1.0 . |
Goの確認
DockerfileでインストールしたGoの確認をします。GOROOTとGOPATHが設定されました。
これからは$GOPATH/src
に下に自分のプロジェクトを書いていきます。
# which go |
まとめ
ようやくGoの環境ができました。フレームワークはどれで書こうかまだ決めかねています。
MartiniがGo Way
でないとか、injectionが分かりずらいとか、Rails Way
やDRY論
疲れていると、
何となく分かる気がします。