ニクニクドットミー

カッコいいおっさんを目指すエンジニアの厳かなブログ

GoをCentOS-6.5に入れてみた!

182b65b9 539c 4d24 9b1f ee4a1a8756f1 Goで生きていくと決めて数時間経ちました。皆さんいかがお過ごしでしょうか。

つい先日行われたdotssummit 2015でたくさんのスタートアップ企業がプレゼンを行いました。

多くのスタートアップが、Goへ舵を切り始めているのが印象的でした。

  1. パフォーマンスがいい
  2. 単一バイナリなので管理が楽
  3. 並立処理が簡単

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を始める人のためのTips集

こう思った

Goの時代が来てます。Goはバイナリを配るだけですぐ使えるので、インフラエンジニアにもってこいな言語です。 ポインタの概念があるので、そこはしっかり覚えないといけませんが、その分効率的なプログラムが書けると思います。 Goで生きて行けるようにがんばるゾ!