StoryEdit 開発日誌

ウェブアプリ StoryEditを作ってましたが延期。普通のブログ。

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は同じディレクトリにできないので、注意。