Goはオープンソースプロジェクトで、BSD-style licenseのもと配布されています。 このドキュメントではソースコードを取得し、あなたのマシンでビルドし、実行する方法を説明します。
ほとんどのユーザーはこのようなことをする必要はありません。かわりに、インストールで説明されているすでにコンパイルされたバイナリパッケージをインストールほうがより簡単な作業でしょう。 もしあなたがこのようなプリコンパイルパッケージの中身の開発を手伝いたいなら、さあどうぞ、続けてください。
二つの公式なGoコンパイラツールチェインがあります。
このドキュメントでは、gc Goコンパイラおよびツール(6g、8gなど)について解説します。
従来のGCCバックエンドによるgccgoを使いたい場合は、Setting up and using gccgoを見てください。
Goコンパイラは三つの命令セットをサポートしています。 アーキテクチャによって、コンパイラの品質には差があります。
amd64 (別名: x86-64); 6g,6l,6c,6a
gccgoのほうがより良い場合もあります)。
386 (別名: x86もしくはx86-32); 8g,8l,8c,8a
amd64ポーティングと同等です。
arm (別名: ARM); 5g,5l,5c,5a
低レベルのOSインターフェイスコードを除き、ランタイムはすべてのポーティングで同じで、mark-and-sweepガーベッジコレクタや効率的な配列と文字列のスライス、必要に応じて成長および縮小するスタックなど効率的なゴルーチンをサポートしています。
コンパイラはDragonFly BSDやFreeBSD、Linux、NetBSD、OpenBSD、 OS X (Darwin)、Plan 9、Solaris、Windowsをターゲットにすることができます。 サポートされているすべての組み合わせは、下記の環境変数に書かれています。
GoツールチェインはC言語で書かれています。ビルドするには、Cコンパイラがインストールされている必要があります。 OS固有の手順については、GoコミュニティウィキページのInstallFromSourceを参照してください。
次の手順を実行するためには、Mercurialがインストールされている必要があります。(hgコマンドがあるかどうかを確かめてください。)
もしMercurialがインストールされていなければ、Mercurial downloadsのページにある手順を実行してください。
Mercurialのバージョンが1.7.x以上であれば、Certification Authoritiesの設定が必要になります。エラーメッセージは次のようなものです:
warning: code.google.com certificate with fingerprint b1:af: ... bc not verified (check hostfingerprints or web.cacerts config setting)
MercurialからCAがないことを指摘されている場合は、Mercurialのバージョンを確認(hg --version)し、
必要に応じてCAを設定してください。
Goはgoというディレクトリにインストールされます。
親となるディレクトリに移動し、goというディレクトリがないことを確認してください。
そして、リポジトリを取得してください:
$ hg clone -u release https://code.google.com/p/go
もしGoのソースコードを変更し、このプロジェクトへ貢献するなら、リポジトリに移動し、releaseブランチから開発用のdefaultブランチへ切り替えてください。 そうでなければ、この手順は無視してください。
$ hg update default
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. ***
最後の数行の詳細はOSやアーキテクチャ、インストールに使用したディレクトリによって異なります。
ビルドを制御する詳細な方法については、環境変数の項目を参照してください。
all.bash (もしくはall.bat)はGoの重要なテストを実行します。これは単にGoをビルドするより時間がかかります。
テストスイートを実行したくない場合は、make.bash (もしくはmake.bat)を代わりに使ってください。
Goが正しくインストールされたかどうかは、簡単なプログラムをビルドすることで確かめられます。
hello.goというファイルを作り、次のプログラムを記述してください:
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
そして、goツールで実行してください:
$ go run hello.go hello, world
"hello, world"というメッセージが表示されていれば、Goは正常にインストールされています。
ほとんどは完了しましたが、もう少しセットアップが必要です。
Goコードの書き方 Goツールのセットアップ方法と使い方を学びましょう
Goコードの書き方のドキュメントは、Goツールを使うための必須のセットアップ手順を紹介しています。
いくつかのGoツールのソースコード(godocを含む)はgo.toolsリポジトリにあります。
これらをすべてインストールするには、go getコマンドを実行してください:
$ go get code.google.com/p/go.tools/cmd/...
もしくは、特定のコマンド(この場合はgodoc)だけインストールしたい場合:
$ go get code.google.com/p/go.tools/cmd/godoc
これらのツールをインストールするには、go getコマンドはMercurialがその環境でインストールされていることを必要とします。
ワークスペース(GOPATH)をセットアップする必要もあります。
詳細は、Goコードの書き方をみてください。
注記: goコマンドはgodocバイナリを$GOROOT/bin (もしくは$GOBIN)に、
coverとvetバイナリを
$GOROOT/pkg/tool/$GOOS_$GOARCHにインストールします。
後半のコマンドは、
"go tool cover"と、
"go tool vet"で実行できます。
一般的なコミュニティとして、
#go-nutsがFreenode IRCサーバーにあり、
Go Nutsメーリングリストは
あなたのインストールや開発作業の問題を手助けしてくれます。
最新情報についていきたい場合には他のメーリングリストもあります。
golang-checkinsではGoのリポジトリが更新されるたびに要約されたメッセージを受け取ることができます。
バグは、Go issue trackerから報告することが出来ます。
Goプロジェクトは安定版のタグをMercurialリポジトリにつけています: release。
releaseタグはGoの現在の安定リリースを指しています。
ほとんどのGoのユーザはこのバージョンを使うべきです。新しいリリースは、
golang-announce
メーリングリストでアナウンスされます。
現在のソースツリーを最新リリースに更新するには、次を実行してください:
$ cd go/src $ hg pull $ hg update release $ ./all.bash
Goのコンパイル環境は環境変数でカスタマイズすることができます。 ビルドに必須のものはありませんが、初期値を上書きすることもできます。
$GOROOT
Goソースコードツリーのおおもとで、だいたい$HOME/goになります。
この値はコンパイル時に決定され、all.bashが実行された場所の親ディレクトリが初期値です。
同じリポジトリの複数のコピーを切り替えたい場合を除いては、設定する必要はありません。
$GOROOT_FINAL
この値は$GOROOTが明示的に設定されなかった場合に、インストールされたバイナリとスクリプトから推定されます。
初期値は$GOROOTの値です。
もしどこかでGoをビルドして他の場所に移したい場合は、最終的な場所を$GOROOT_FINALに設定してください。
$GOOSと$GOARCH
ターゲットのOSとアーキテクチャの名前です。
初期値は$GOHOSTOSと$GOHOSTARCHと同じです。
$GOOSは、
darwin (Mac OS X 10.6以上)、 dragonfly、 freebsd、
linux、 netbsd、 openbsd、
plan9、 solarisまたはwindowsのどれかです。
$GOARCHは、
amd64 (64ビット x86, もっとも成熟している)、
386 (32ビット x86)またはarm (32ビット ARM)のどれかです。
$GOOSと$GOARCHの有効な組み合わせは:
$GOOS | $GOARCH |
|
|---|---|---|
darwin | 386 |
|
darwin | amd64 |
|
dragonfly | 386 |
|
dragonfly | amd64 |
|
freebsd | 386 |
|
freebsd | amd64 |
|
freebsd | arm |
|
linux | 386 |
|
linux | amd64 |
|
linux | arm |
|
netbsd | 386 |
|
netbsd | amd64 |
|
netbsd | arm |
|
openbsd | 386 |
|
openbsd | amd64 |
|
plan9 | 386 |
|
plan9 | amd64 |
|
solaris | amd64 |
|
windows | 386 |
|
windows | amd64 |
$GOHOSTOS and $GOHOSTARCH
ホストOSとアーキテクチャの名前です。 初期値はローカルのシステムのOSとアーキテクチャになります。
$GOOSと$GOARCHの有効な組み合わせは上記と同じです。
指定する値は、ローカルのシステムと互換性のあるものでなければなりません。
例えば、x86システムで$GOHOSTARCHをarmに設定することは出来ません。
$GOBIN
Goバイナリがインストールされる場所です。
初期値は$GOROOT/binです。
インストール後は、このディレクトリを$PATHに追加することで、ツールが使えるように成ります。
もし$GOBINが設定されていれば、goコマンドはすべてのコマンドをそこにインストールします。
$GO386 (386のみ、初期値はネイティブビルドでは自動判別それ以外では387)
これは8gが浮動小数点演算をするコードを生成する際に、387浮動小数点ユニットを使う(387を設定する)か、SSE2命令を使う(sse2を設定する)かを設定します。
GO386=387: 浮動小数点演算にx87を使う; すべてのx86チップをサポートする(Pentium MMX以降).
GO386=sse2: 浮動小数点演算にSSE2を使う; 387よりパフォーマンスはよいが、Pentium 4/Opteron/Athlon 64以降でのみ使用可能。
$GOARM (armのみ、初期値はターゲット上でビルドしている場合は自動判別、そうでなければ6)
ランタイムがターゲットにすべきARM浮動小数点コプロセッサアーキテクチャのバージョンを設定します。 ターゲットシステム上でコンパイルしている場合は自動判別です。
GOARM=5: ソフトウェア浮動小数点を使います; CPUはVFPコプロセッサを持ちません
GOARM=6: VFPv1のみを使います; クロスコンパイル時のデフォルトです; ARM11以上向けです (だいたいはVFPv2以上がサポートされています)
GOARM=7: VFPv3を使います; Cortex-Aコアで利用できます
もし自信がなければ、この値は設定せず、Goの実行ファイルを実行するときに必要に応じて調整してください。 GoコミュニティウィキのGoARMのページに、GoのARMサポートに関する追加の情報があります。
$GOARCHと$GOOSは
ターゲット環境を識別します、実行している環境ではありません。
実際、常にクロスコンパイルします。
アーキテクチャによって、ターゲット環境が実行できるバイナリの種類を示します:
x86-64システムで32ビットのOS動かしている場合は、GOARCHを386に設定する必要があります。
amd64ではありません。
もしこれらの初期値を上書きしたい場合には、シェルのプロファイル($HOME/.bashrcや
$HOME/.profileなど)で設定してください。
例えば次のようになります:
export GOROOT=$HOME/go export GOARCH=amd64 export GOOS=linux
繰り返しになりますが、ビルドやインストール、開発時にこれらの設定値が必要になることはありません。