Goで生きていくと決めて数時間経ちました。皆さんいかがお過ごしでしょうか。
つい先日行われたdotssummit 2015でたくさんのスタートアップ企業がプレゼンを行いました。
多くのスタートアップが、Goへ舵を切り始めているのが印象的でした。
- パフォーマンスがいい
- 単一バイナリなので管理が楽
- 並立処理が簡単
gunosyではappサーバはGoで動いていて、ピーク時のレスポンスタイムは30msだそうです。はやい。
メルカリは部分的にGoを使っていて、発表者の久保さん@cubicdaiyaのGo使いぶりが凄まじく、「めっちゃかっこいいな」と思い、Goで生きて行こうと決めたのでした。なので、数時間というか2日くらい経ってます。
Go自体はMacに入れていたのですが、昨日Vagrant Cloudを試していて作ったCentOS-6.5の環境があるので、そちらに改めて入れてみました。
Goのダウンロード
cd /usr/local/src
wget --no-check-certificate https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz
tar zxvf go1.4.1.linux-amd64.tar.gz
でGoがダウンロード出来ましたので、PATHが通っている所に設置します。 シンボリックリンクを張ってみました。
ln -s /usr/local/src/go/bin/go /usr/bin/go
GOPATH,GOROOTを設定
.bash_profileに以下を書きます。
export GOROOT=/usr/local/src/go
export GOPATH=$HOME/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT
export PATH=$PATH:$GOPATH
export PATH=$PATH:$GOPATH/bin
※追記 GOPATHの指定が誤っていました。binまで付けてしまうとgo getした際に/bin/bin/とbin以下にさらにbinディレクトリを作ってしまう為、PATHが通らなくなってしまいます。 GOROOTはGoを設置してるディレクトリを指定します。 GOPATHはgo getしたときに格納されるディレクトリになります。
ちなみにGOPATHを設定しないまま、go getすると怒られます。
package github.com/cubicdaiya/nginx-build: cannot download, $GOPATH not set. For more details see: go help gopath
GOPATHについて詳しく説明してくれている記事がありましたので、引用。
GOPATH には2つ役割があります。 ビルド時のインポートパスとして、GOPATH に指定したすべてのディレクトリを参照する(コロン区切り) go get コマンドで外部パッケージを読み込んだ時、 GOPATH の先頭のディレクトリにダウンロードする そして、公式ドキュメントにもありますが、Goで自分のプロジェクトを書く時にも、このGOPATHの下で書くのが良いとされています。 例えば、自分が githubでソースコードを管理していて、ユーザー名が foo、リポジトリが bar だったら $GOPATH/src/github.com/foo/bar というディレクトリを作ってそこで作業します。
ここまでくればGoは動くはずです。
$ go version
go version go1.4.1 linux/amd64
go getしてみる
せっかくなので、go getしてモジュールを手に入れましょう。 dotssummitで衝撃だった@cubicdaiyaさんのnginx-buildを入れてみます。 nginx-buildでnginxをビルドしよう
go get -u github.com/cubicdaiya/nginx-build
mkdir -p ~/opt/nginx
nginx-build -d ~/opt/nginx
cd ~/opt/nginx/1.7.9/nginx-1.7.9
sudo make install
objs/nginx -v
無事インストールされました! ※途中make installする必要がありました。
参考
こう思った
Goの時代が来てます。Goはバイナリを配るだけですぐ使えるので、インフラエンジニアにもってこいな言語です。 ポインタの概念があるので、そこはしっかり覚えないといけませんが、その分効率的なプログラムが書けると思います。 Goで生きて行けるようにがんばるゾ!