Go言語を修正してソースからビルドする

Go自体に手を入れたいということがあって、ソースからビルドしてみた。

Goのソースコードを入手

公式のサイトから手に入る。開発中のものが欲しい場合にはgithubから取得する。

$ cd /tmp
$ wget https://storage.googleapis.com/golang/go1.8.3.src.tar.gz
$ tar xf go1.8.3.src.tar.gz
$ cd go

GOROOT_BOOTSTRAP を設定する

Goをビルドするために必要なGoを指定する環境変数。デフォルトでは $HOME/go1.4 になっている。必ずしも1.4が必要なわけではなく、1.4以上のバージョンであれば良い

$ which go
/usr/local/go/bin/go
$ go version
go version go1.8 darwin/amd64
$ export GOROOT_BOOTSTRAP=/usr/local/go

ビルド

src に移動して all.bash を実行する。 all.bashsrc に移動しないと実行できない。完了までには数分かかる。

$ cd src
$ ./all.bash

完了すると bin/go が出来ている。

$ cd ../bin
$ ./go version
go version go1.8.3 darwin/amd64

独自の修正を加えた場合

修正した内容にexportedなものがあれば、必ずapi配下の goX.Y.txt (X.Yはバージョン番号)を修正する。

例えば、fmtパッケージに

func PrintTwice(args ...interface{}) {
    Print(args...)
    Print(args...)
}

という変更を加えた場合、go1.8.txtに

pkg fmt, PrintTwice(...interface{})

というのを追記する。

ビルドの最後の方に、apiの変更をチェックするタスクがあって、そこで整合性の確認が行われるため、この記載がないとエラーになってしまう。

all.bash を使わない方法がありそうだけど中身は見てない。

まとめ

  • Goをソースからビルドするのは難しくない
  • 必要なバージョンは1.4以上で、1.4必須ではない
  • exportされた修正がある場合は、goX.Y.txtも修正する