このドキュメントはhttp://golang.org/doc/install/sourceの翻訳です。

はじめに
C言語ツールのインストール(必要に応じて)
Mercurialのインストール(必要に応じて)
リポジトリからの取得
Go言語のインストール
インストール後の確認
コミュニティリソース
最新リリースを保つ
オプション環境変数

はじめに

Go言語はオープンソースプロジェクトで、BSD-style licenseで提供されています。このドキュメントでは、ソースの取得、ビルド、実行方法について説明します。

ほとんどのユーザにはこの作業は必要なく、代わりにインストールページで説明しているもっと手軽なコンパイル済みのバイナリパッケージをインストールしてください。しかし、それらコンパイル済みパッケージの開発を支援したい場合は読み続けてください。

Go言語の公式コンパリラツール群は2種類あります。このドキュメントは「gc Goコンパイラ」とその関連ツール(6g, 8g 等)について解説します。GCCをバックエンドに使用した従来型コンパイラであるgccgoの動作についての情報は、Setting up and using gccgを参照ください。

Go言語コンパイラは、3つのインストラクションセットをサポートします。システムの違いによりコンパイラの品質に大きな差があります。

amd64 (別名 x86-64); 6g,6l,6c,6a
よく実装されています。コンパイラは最適化機能を持ち、よいコードを生成します。(とはいえgccgoのほうが勝る部分もあります)
386 (別名 x86 or x86-32); 8g,8l,8c,8a
amd64 と互換。
arm (別名 ARM); 5g,5l,5c,5a
Linuxバイナリのみサポート。他のインストラクションに比べると使用されていないため、テストが完全ではない。

オペレーティングシステムと直接やりとりするような低レベルコードを別にすれば、Go言語のランタイムはすべてのプラットフォームで等しく次の実装がされています。

  • mark-and-sweep方式のガーベージコレクション(より優れたものを現在計画中)
  • 便利な配列と文字列のスライス
  • セグメント管理されたスタック
  • 必要に応じてスタックの拡張・縮小を行える効率の良いgoroutineをサポート

コンパイラがターゲットとするオペレーティングシステムは、FreeBSD、Linux、NetBSD、OpenBSD、OS X (Darwin)、Windowsです。サポートするOSとインストラクションの全組合せは、後述する環境変数の項にまとめてあります。

C言語ツールのインストール(必要に応じて)

Go言語のツール群はC言語で記述されています。ビルドにはCコンパライラがインストールされている必要があります。

OS Xでは、CコンパイラはXcodeの一部としてインストール可能です。

Ubuntu/Debianでは、「sudo apt-get install gcc libc6-dev」を使用してください。64ビットシステム上で32ビットバイナリをビルドするときはlibc6-dev-i386パッケージも必要です。

Windowsでは、MinGWgccをインストールします。(binサブディレクトリをPATHに加えることを忘れずに)

Mercurialのインストール(必要に応じて)

これより先のステップを実行するには、Mrcurialをインストールしておかなければなりません。(hgコマンドが存在するか確認してください。) Mercurialをインストールするには、Unixシステムのほとんどにおいて次のコマンドで十分です。

sudo easy_install mercurial==2.0

Ubuntu/Debianの場合、ディストリビューションパッケージのリポジトリ内のMercurialは、古くて利用できない可能性があります。最初に次のコマンドを試してみてください。

apt-get install python-setuptools python-dev build-essential

うまくいかない、もしくはWindowsを使用している場合は、Mercurial Downloadページから手動でインストールしてください。

Mercurialバージョン1.7.x以上では、認証局(CA)の設定が必要です。認証局を設定せずにMercurialを実行すると、次のエラーメッセージが出力されます。

warning: code.google.com certificate with fingerprint b1:af: ... bc not verified (check hostfingerprints or web.cacerts config setting)

Mercurialのバージョンを確認(hg --version)し、必要に応じてCAの設定を行ってください。

リポジトリからの取得

Go言語は、goという名のディレクトリにインストールします。まず、その親となるディレクトリに移動し、goディレクトリが存在しないことを確認してください。次に、リポジトリをチェックアウトします。

$ hg clone -u release https://code.google.com/p/go

Go言語のインストール

Go言語のディストリビューションをビルドするには、次を実行します。

$ cd go/src
$ ./all.bash

(Windows上でビルドするときは、all.batを使用してください)

すべてうまくいくと、最後に次のように出力されます。

ALL TESTS PASSED

---
Installed Go for linux/amd64 in /home/you/go.
Installed commands in /home/you/go/bin.
*** You need to add /home/you/go/bin to your $PATH. ***
The compiler is 6g.

最後の数行は、インストールを行ったオペレーティングシステム、アーキテクチャ、ルートディレクトリの情報です。

ビルドの制御方法についての追加情報は、後述する環境変数の項を参照ください。

インストール後の確認

Go言語が正しくインストールされたか、簡単なプログラムをビルドして検証します。

hello.goという名前のファイルを作成し、下のプログラムを記述します。

package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}

次に、go ツールを使って実行します。

$ go run hello.go
hello, world

「hello, world」というメッセージが表示されれば、Go言語のインストールは成功です。

コミュニティリソース

Freenode IRCサーバ上の#go-nutsや、Go Nutsメーリングリストのような有用なコミュニティリソースには、インストールや開発作業における問題を手助けしてくれるアクティブなデベロッパーがいます。

Go言語を最新の状態にしておきたい方のために、別のメーリングリストgolang-checkinがあり、Go言語のリポジトリへのチェックインを要約したメッセージが受け取れます。

バグの報告はGo issue trackerを利用ください。

最新リリースを保つ

Goプロジェクトでは、GoプロジェクトのMercurialリポジトリ内で、2つのstableタグ、releaseweeklyをメンテしています。

releaseタグは、Go言語の最新の安定リリースを示します。Go言語のユーザのほとんどはこのバージョンを利用すべきです。新たなリリースが行われたときはgolang-announceメーリングリストでアナウンスされます。

既存のディレクトリツリーを最新リリースに更新するには、次を実行します。

$ cd go/src
$ hg pull
$ hg update release
$ ./all.bash

weeklyタグは、ほぼ1週間に一度アップデートされます。これはGoのコア開発者がのみが使用すべきものです。weeklyタグを使用するときは、代わりにhg update weeklyを実行してください。

オプション環境変数

Go言語のコンパイル環境は、環境変数によってカスタマイズ可能です。ビルドの際、必須ではありませんが必要に応じてこれらのデフォルト値を上書きできます。

$GOROOT

Go言語ディレクトリツリーのルートで、多くの場合$HOME/goです。この値はGo言語のコンパイル時に組み込まれ、all.bashが実行されたディレクトリの親ディレクトリがデフォルト値になります。リポジトリのローカルコピーを複数持ち、切り替えるのでなければ設定する必要はありません。

$GOROOT_FINAL

インストール済みのバイナリとスクリプトは$GOROOTが設定されていないときにこの値を利用します。デフォルト値は$GOROOTの値です。あるディレクトリでGo言語のディレクトリツリーをビルドした後、ほかの場所に移動したいときに、最終的な位置を$GOROOT_FINALに設定します。

$GOOSおよび$GOARCH

ターゲットのオペレーティングシステムとコンパイルアーキテクチャの名前です。これらのデフォルト値はそれぞれ$GOHOSTOS$GOHOSTARCHです。(後述)

$GOOSに設定できる値は、darwin(Mac OS X 10.6以降)、freebsdlinuxnetbsdopenbsdplan9windowsです。$GOARCHに設定できる値は、amd64(64bit x86、最良の実装)、386(32bit x86)、arm(32bit ARM)です。$GOOS$GOARCHの有効な組み合わせは次のいずれかになります。

$GOOS $GOARCH
darwin 386
darwin amd64
freebsd 386
freebsd amd64
linux 386
linux amd64
linux arm
netbsd 386
netbsd amd64
openbsd 386
openbsd amd64
plan9 386
windows 386
windows amd64

$GOHOSTOSおよび$GOHOSTARCH

ホストのオペレーティングシステムとコンパイルアーキテクチャの名称です。これらのデフォルト値は、ローカルシステムのオペレーティングシステムとアーキテクチャです。

有効な組み合わせは、上の表の$GOOS$GOARCHと同じです。設定される値は、ローカルシステムと互換性を持たなければなりません。たとえば、x86システム上で$GOHOSTARCHarmと設定してはいけません。

$GOBIN

Go言語のバイナリがインストールされるディレクトリで、デフォルトは$GOROOT/binです。インストール後、各ツールを利用できるようにこのディレクトリを$PATHに加えてください。$GOBINを設定すると、goコマンドはそのディレクトリに全コマンドをインストールします。

$GOARM (arm, default=6)

ランタイムライブラリがターゲットとするARMアーキテクチャのバージョンです。$GOARMに5を設定すると、リンカはハードウエアによる浮動小数点サポートを使用する代わりに、ソフトウエアによる浮動小数点の実装を呼び出すようにします。

$GOARCH$GOOSの値は、コンパイルする環境ではなくターゲットとなる実行環境を指定します。すなわちいつでもクロスコンパイルが可能です。アーキテクチャとは、ターゲットとなる環境で実行可能なバイナリの種類のことです。たとえば、x86-64システム上で、32ビット専用のオペレーティングシステムを実行させているときは、GOARCHにはamd64ではなく、386をセットしなくてはなりません。デフォルト値を上書きしたいときは、これらの環境変数をシェルプロファイル($HOME/.bashrc$HOME/.profileなど)に設定してください。この設定例は次のようになります。

export GOROOT=$HOME/go
export GOARCH=amd64
export GOOS=linux

ただし繰り返して言いますが、Go言語のディレクトリツリーのビルド、インストール、開発にこれらの変数は必須ではありません。