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


はじめに
環境変数
マルチプラットフォーム対応
C言語ツールのインストール
リポジトリからの取得
Go言語のインストール
プログラムの記述
最新リリースを保つ
コミュニティ

はじめに

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

Go言語を試すには2通りの方法がありますが、このドキュメントではgc Go言語コンパイラとそのツール(6g, 8gなど)について説明します。もうひとつはgccgoというGCCをバックエンドにしたコンパイラです。gccgoについてはSetting up and using gccgoを参照ください。

環境変数

Go言語のコンパイル環境は、3つ(オプションで+1)の環境変数に依存しています。

$GOROOT

ベースとなるディレクトリです。通常は$HOME/goですが、他のディレクトでも構いません。

$GOOS, $GOARCH

この2つにはターゲットとなるOSおよびシステムを指定します。$GOOSには、linuxfreebsddarwin (Mac OS X 10.5 または10.6)、 nacl (Native Client、実装は不完全)のいずれかを指定します。$GOARCHには、amd64 (64-bit x86、最良の実装)、 386 (32-bit x86)、arm (32-bit ARM, 実装は不完全)のいずれかを指定します。$GOROOT$GOARCHの有効な組み合わせは、次のいずれかになります。

$GOOS $GOARCH
darwin 386
darwin amd64
freebsd 386
freebsd amd64
linux 386
linux amd64
linux arm
nacl 386

$GOBIN (任意)

バイナリがインストールされるディレクトリ。デフォルトは$HOME/binです。インストール後、このディレクトリを$PATHに含めるとツールが使えるようになります。

$GOARM (任意、arm, デフォルト=6)

ランタイムライブラリがターゲットとするARMアーキテクチャのバージョン。ARMv6コアは効率的な同期プリミティブを持っています。$GOARMに5を設定すると、古いアーキテクチャ上でも機能するようSWPインストラクションを使用するランタイムライブラリにコンパイルします。v6のコードを古いコア上で動作させると不正インストラクショントラップを引き起こします。

$GOARCH, $GOOSの値は、コンパイルする環境ではなくターゲットとなる実行環境を指定します。すなわちいつでもクロスコンパイルが可能です。

これらの環境変数はシェルプロファイル($HOME/.bashrc$HOME/.profileなど)に設定してください。この設定例は次のようになります。

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

正しく設定できているか環境変数を一覧表示させて再確認ください。(変更を反映させるには新しいシェルまたはターミナルウィンドウをを開く必要があります)

$ env | grep ^GO

マルチプラットフォーム対応

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

  • amd64 (別名:x86-64) コマンド名:6g,6l,6c,6a
    一番よく実装されています。コンパイラは最適化機能を持ち、よいコードを生成します。
    (とはいえgccgoのほうが優れていることもあります)
  • 386 (別名:x86, x86-32) コマンド名:8g,8l,8c,8a
    amd64と同程度。ほぼ完全な実装です。
  • arm (別名:ARM) コマンド名:5g,5l,5c,5a
    いくつか大きいバグがあり現在修正中です。QEMUとアンドロイド携帯でテストされています。またLinuxバイナリのみサポートしています。

OSと直接やりとりするような低レベルなコードを別にすれば、Go言語のランタイムはすべてのプラットフォームで次の実装が同様にされています。

  • mark-and-sweep方式のガーベージコレクション(より優れたものを現在計画中)
  • 便利な配列と文字列のスライス
  • セグメント管理されたスタック
  • 強力なgoroutine

もう一方のgcccgoのドキュメントでコンパイラ、環境についての詳細を参照ください。

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

Go言語のツールはC言語で記述されています。ビルドにはGCC、標準Cライブラリ、Bison、make、awk、テキストエディタのedが必要です。
OS Xの場合はXcodeに含まれています。Linuxでは次のコマンドでインストールします。

$ sudo apt-get install bison gcc libc6-dev ed gawk make
(Linuxディストリビューションによっては他のコマンドを使用します)

リポジトリからの取得

Mercurialをインストールしていない(hgコマンドがない)ときは、次のコマンドを実行します。

$ sudo easy_install mercurial

ほとんどのシステムでうまくいくはずです。(Ubuntuの場合は、まずこれを試してみてください:apt-get install python-setuptools python-dev build-essential gcc)。うまくいかなければ、Mercurialのダウンロードページに行ってください。

つぎに$GOROOTディレクトリが存在しないか、または空の状態であることを確認した上でリポジトリからチェックアウトしてください。

$ hg clone -r release https://go.googlecode.com/hg/ $GOROOT

Go言語のインストール

Go言語をビルドします。次のコマンドを実行してください。

$ cd $GOROOT/src
$ ./all.bash

成功すると、下のメッセージを出力して完了します。

--- cd ../test
N known bugs; 0 unexpected bugs

Nの部分は番号でリリースのたびに変わります。

プログラムの記述

file.goというファイルのコンパイルは次のようにします。

$ 6g file.go

6gというコマンドはamd64向けのGo言語コンパイラで、file.6というファイルを出力します。この‘6’という数字はamd64アーキテクチャーの識別コードです。386の識別コードは‘8’、armは‘5’です。すなわち386アーキテクチャー上でコンパイルする場合はコンパイラは8gで、出力ファイルはfile.8となります。

リンクは次のようにします。

$ 6l file.6

プログラムの実行は次のようにします。

$ ./6.out

下はプログラミングから実行までの一連の例です。

$ cat >hello.go <<EOF
package main
import "fmt"
func main() {
    fmt.Printf("hello, world\n")
}
EOF
$ 6g hello.go
$ 6l hello.6
$ ./6.out
hello, world
$

hello.6をリンクする際、依存しているパッケージ(この例だとfmtパッケージ)を6lコマンドに与えてやる必要はありません。リンカは、hello.6から自動的に依存するファイルを認識します。

大きなプログラムをビルドするにはMakefileを使いたくなるでしょう。これらのサンプルは $GOROOT/src/cmd/godoc/Makefile および $GOROOT/src/pkg/*/Makefileにあります。

Contributing to the Go projectに、ビルド、テストの手順についてより詳細な情報が記載されています。

最新リリースを保つ

新しいリリースは、Go Nutsメーリングリストでアナウンスされます。既存のディレクトリツリーを最新のリリースに更新するには、次を実行してください。

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

コミュニティ

リアルタイムサポートは、Freenode IRCサーバの#go-nutsチャネルにて。
Go言語の公式ディスカッション用メーリングリストは Go Nutsにて。
バグの報告はGo issue trackerまで。
開発の状況を知りたい方は、別のメーリングリストgolang-checkinsにてGoリポジトリの個別のチェックイン情報のサマリが受け取れます。