Go言語、ビルド編。
Scala, Erlang, Go, などなど、様々な新言語がひしめいてきた2013年。4年前の登場から、話題性が高かったGO言語だが、久々に触ってみた。
ビルドがgo buildになってる。
'6g'とか、アーキテクチャにあわせたコンパイラがいくつもついてきた、リリース当初。それでもgofmtとか、新時代を予兆させるツールはついていたものの、ライブラリ周りがあまりに揃っておらず、実用にはやはり遠いと感じたあのころ。Makefileをかくのか、、うーん、たしかに、モダンとは云いがたいなぁ、なんて思ってました。
久々に触ったGoには、Go toolsという充実のツール郡がついてる。buildも、そのひとつ。
Go pathって?
Go pathとは、Go toolsが前提とするビルド環境をさす。Go言語では、GOPATHという環境変数があり、GOPATHにて、Go pathへのパスを指定する。Go pathの構成を以下に示す。
-- src |-- mysoft |-- foo |-- foo.go |-- bar |-- bar.go -- bin -- pkg
Go pathは、基本的に三つのディレクトリで構成される。src, pkg, binだ。Go言語のtarballを解凍したら、まさしくこの基本構成となっていることに気づくだろう。'go build'は、ソフトウェアを、このGo pathで開発、ビルドすることを前提としている。
src
ここには、ソールファイルがおかれる。Javaなどと同じく、名前空間でディレクトリが別れている。mysoftというプログラムを書いているとし、mysoftのなかには、foo、barという2種類のパッケージを実装しているとしよう。すると、src/mysoft, src/mysoft/foo, src/mysoft/barという3つのディレクトリ以下に、ソースファイルをおいておく。
pkg
ここには、依存する外部パッケージを置く。.aなどの静的ライブラリがおかれるのもここ。
bin
できたてのバイナリがここにのる。
具体的に、どうやってビルドする?
環境設定
go buildは、Go pathでビルドされることを前提とする。ここで注意点は、標準ライブラリなどもpkgにはいってないと使えないことである。そのため、Go言語のtarballを解凍したディレクトリ(標準ライブラリとかある)+自分のソフトウェアのディレクトリがGOPATHにはいってる必要がある。
このため、
$ export GOPATH=/path/to/go $ export GOPATH=$GOPATH:$MYSOFTDIR
と、GOPATHに、標準のGoディレクトリと、自身のソフトウェアディレクトリをいれてやる必要がある。
ビルドー
$ go build mysoft
で、おけ。
ちなみに、最近のGoだと、GOROOTと、GOPATHは同じディレクトリにできないので、注意。