ソースからGoをインストールする
このトピックでは、Goをソースコードからビルドして実行する方法について説明します。インストーラーを使用してインストールする場合は、「ダウンロードとインストール」を参照してください。
はじめに
Goは、BSDスタイルのライセンスで配布されているオープンソースプロジェクトです。このドキュメントでは、ソースをチェックアウトし、自分のマシンでビルドし、実行する方法について説明します。
ほとんどのユーザーはこれを行う必要がなく、代わりに「ダウンロードとインストール」で説明されているように、はるかに簡単なプロセスであるプリコンパイル済みバイナリパッケージからインストールします。ただし、これらのプリコンパイル済みパッケージに含まれるものを開発するのに協力したい場合は、読み続けてください。
公式のGoコンパイラツールチェーンは2つあります。このドキュメントでは、gc Goコンパイラとツールに焦点を当てています。GCCバックエンドを使用するより伝統的なコンパイラであるgccgoでの作業方法については、「gccgoのセットアップと使用」を参照してください。
Goコンパイラは次の命令セットをサポートしています
-
amd64、386 x86命令セット、64ビットおよび32ビット。-
arm64、arm ARM命令セット、64ビット(AArch64)および32ビット。-
loong64 - 64ビットLoongArch命令セット。
-
mips64、mips64le、mips、mipsle MIPS命令セット、ビッグエンディアンおよびリトルエンディアン、64ビットおよび32ビット。-
ppc64、ppc64le - 64ビットPowerPC命令セット、ビッグエンディアンおよびリトルエンディアン。
-
riscv64 - 64ビットRISC-V命令セット。
-
s390x - IBM z/Architecture。
-
wasm - WebAssembly.
コンパイラは、AIX、Android、DragonFly BSD、FreeBSD、Illumos、Linux、macOS/iOS (Darwin)、NetBSD、OpenBSD、Plan 9、Solaris、およびWindowsオペレーティングシステムをターゲットにできます(ただし、すべてのオペレーティングシステムがすべてのアーキテクチャをサポートしているわけではありません)。
「ファーストクラス」と見なされるポートのリストは、ファーストクラスポートのWikiページで入手できます。
サポートされている組み合わせの完全なセットは、以下の環境変数の議論に記載されています。
全体的なシステム要件については、Go WikiのMinimumRequirementsページを参照してください。全体的なシステム要件。
ブートストラップ用のGoコンパイラバイナリをインストールする
GoツールチェーンはGoで書かれています。これをビルドするには、Goコンパイラがインストールされている必要があります。ツールの初期ビルドを行うスクリプトは、$PATHに「go」コマンドを探すので、システムにGoがインストールされており、$PATHに設定されていれば、ソースからGoをビルドする準備ができています。または、新しいGoツールチェーンをビルドするために使用するGoインストールのルートに$GOROOT_BOOTSTRAPを設定することもできます。$GOROOT_BOOTSTRAP/bin/goが使用するgoコマンドである必要があります。
必要なGoの最小バージョンは、Goのターゲットバージョンによって異なります。
- Go <= 1.4: Cツールチェーン。
- 1.5 <= Go <= 1.19: Go 1.4コンパイラ。
- 1.20 <= Go <= 1.21: Go 1.17コンパイラ。
- 1.22 <= Go <= 1.23: Go 1.20コンパイラ。
- 今後、Goバージョン1.NはGo 1.Mコンパイラを必要とします。ここでMはN-2を偶数に丸めたものです。例:Go 1.24と1.25はGo 1.22を必要とします。
ブートストラップツールチェーンを取得するには、4つの方法があります。
- Goの最新バイナリリリースをダウンロードします。
- 動作するGoインストールがあるシステムを使用してツールチェーンをクロスコンパイルします。
- gccgoを使用します。
- Go 1.4からツールチェーンをコンパイルします。Go 1.4はCで書かれたコンパイラを持つ最後のGoリリースです。
これらのアプローチについては、以下で詳しく説明します。
バイナリリリースからのブートストラップツールチェーン
バイナリリリースをブートストラップツールチェーンとして使用するには、ダウンロードページを参照するか、最小バージョン要件を満たす他のパッケージ化されたGoディストリビューションを使用してください。
クロスコンパイルされたソースからのブートストラップツールチェーン
Go 1.4がターゲットとしなかったシステム(例:linux/ppc64le)で必要となる、ソースからブートストラップツールチェーンをクロスコンパイルするには、別のシステムにGoをインストールし、bootstrap.bashを実行します。
(例として)実行すると
$ GOOS=linux GOARCH=ppc64 ./bootstrap.bash
bootstrap.bashは、そのGOOS/GOARCHの組み合わせ用のツールチェーンをクロスコンパイルし、結果のツリーを../../go-${GOOS}-${GOARCH}-bootstrapに残します。このツリーは、指定されたターゲットタイプのマシンにコピーして、GOROOT_BOOTSTRAPとしてローカルビルドをブートストラップするために使用できます。
gccgoを使用したブートストラップツールチェーン
gccgoをブートストラップツールチェーンとして使用するには、$GOROOT_BOOTSTRAP/bin/goがgccgo 5の一部として提供されるgoツールになるように設定する必要があります。たとえば、Ubuntu Vividでは
$ sudo apt-get install gccgo-5 $ sudo update-alternatives --set go /usr/bin/go-5 $ GOROOT_BOOTSTRAP=/usr ./make.bash
Cソースコードからのブートストラップツールチェーン
Cソースコードからブートストラップツールチェーンをビルドするには、gitブランチrelease-branch.go1.4またはgo1.4-bootstrap-20171003.tar.gzを使用します。これにはGo 1.4のソースコードと、より新しいオペレーティングシステムでツールを実行し続けるための蓄積された修正が含まれています。(Go 1.4はツールチェーンがCで書かれた最後のディストリビューションでした。)Go 1.4ソースを展開した後、srcサブディレクトリにcdし、環境変数CGO_ENABLED=0を設定し、make.bash(またはWindowsではmake.bat)を実行します。
Go 1.4のソースがGOROOT_BOOTSTRAPディレクトリに展開されたら、このgitクローンインスタンスをブランチrelease-branch.go1.4にチェックアウトしたままにする必要があります。具体的には、「リポジトリの取得」という後のステップでこのgitクローンを再利用しようとしないでください。go1.4ブートストラップツールチェーンは、このリポジトリのルートに存在すると想定しているgo1.4ソースを適切にたどることができる必要があります。
Go 1.4は、Goの後のバージョンが動作するすべてのシステムで動作するわけではないことに注意してください。特に、Go 1.4は現在のバージョンのmacOSをサポートしていません。そのようなシステムでは、ブートストラップツールチェーンは他の方法のいずれかを使用して取得する必要があります。
Gitをインストールする(必要な場合)
次のステップを実行するには、Gitがインストールされている必要があります。(続行する前にgitコマンドがあることを確認してください。)
動作するGitインストールがない場合は、Gitダウンロードページの指示に従ってください。
(オプション)Cコンパイラをインストールする
GoプログラムがCライブラリをインポートできるようにするcgoサポート付きのGoインストールをビルドするには、まずgccやclangなどのCコンパイラをインストールする必要があります。これは、システムで標準的なインストール方法を使用して行います。
cgoなしでビルドするには、all.bashまたはmake.bashを実行する前に環境変数CGO_ENABLED=0を設定します。
リポジトリを取得する
Goをインストールするディレクトリに移動し、gorootディレクトリが存在しないことを確認します。次に、リポジトリをクローンし、最新のリリース**タグ**または**リリースブランチ**(たとえば、go1.22.0、またはrelease-branch.go1.22)をチェックアウトします。
$ git clone https://go.googlesource.com/go goroot
$ cd goroot
$ git checkout <tag>
ここで、<tag>はリリースのバージョン文字列です。
Goはチェックアウトされたディレクトリにインストールされます。たとえば、Goが$HOME/gorootにチェックアウトされた場合、実行可能ファイルは$HOME/goroot/binにインストールされます。ディレクトリ名は任意ですが、Goが$HOME/goにチェックアウトされた場合、$GOPATHのデフォルトの場所と競合することに注意してください。以下のGOPATHを参照してください。
注意: ソースからブートストラップバイナリもコンパイルすることを選択した場合(前のセクションで)、go1.4リポジトリを明確に保つ必要があるため、この時点で再度git cloneする必要があります(最新の<tag>をチェックアウトするため)。
(オプション)マスターブランチに切り替える
Goのソースコードを変更し、プロジェクトに変更を貢献するつもりがある場合は、リポジトリをリリース**タグ**から移動して、マスター(開発)ブランチに移動します。そうでない場合は、このステップをスキップしてください。
$ git checkout master
Go をインストールする
Goディストリビューションをビルドするには、以下を実行します。
$ cd 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. ***
最後の数行の詳細は、インストール中に使用されたオペレーティングシステム、アーキテクチャ、ルートディレクトリを反映しています。
ビルドを制御する方法の詳細については、以下の環境変数の議論を参照してください。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ツール(goplsを含む)のソースコードは、golang.org/x/toolsリポジトリに保存されています。ツールの1つ(この場合はgopls)をインストールするには
$ go install golang.org/x/tools/gopls@latest
コミュニティリソース
ヘルプページに記載されている通常のコミュニティリソースには、インストールの問題や開発作業について役立つアクティブな開発者がいます。最新情報を入手したい人向けには、Goリポジトリへの各チェックインを要約したメッセージを受け取る別のメーリングリストgolang-checkinsがあります。
バグはGoイシュートラッカーを使用して報告できます。
リリースに追いつく
新しいリリースはgolang-announceメーリングリストで発表されます。各アナウンスには、最新のリリース**タグ**が記載されています。たとえば、go1.9です。
既存のツリーを最新リリースに更新するには、次を実行します。
$ cd go/src
$ git fetch
$ git checkout <tag>
$ ./all.bash
ここで、<tag>はリリースのバージョン文字列です。
オプションの環境変数
Goコンパイル環境は環境変数でカスタマイズできます。ビルドではどれも必須ではありませんが、デフォルトをオーバーライドするためにいくつか設定したい場合があるかもしれません。
$GOROOTGoツリーのルート。多くの場合
$HOME/go1.Xです。その値はコンパイル時にツリーに組み込まれ、all.bashが実行されたディレクトリの親にデフォルト設定されます。複数のローカルリポジトリコピーを切り替えたい場合を除き、これを設定する必要はありません。$GOROOT_FINAL$GOROOTが明示的に設定されていない場合に、インストールされたバイナリとスクリプトによって想定される値。デフォルトは$GOROOTの値です。Goツリーをある場所でビルドし、ビルド後に別の場所に移動したい場合は、$GOROOT_FINALを最終的な場所に設定します。$GOPATHGoディストリビューション外のGoプロジェクトが通常チェックアウトされるディレクトリ。たとえば、
golang.org/x/toolsは$GOPATH/src/golang.org/x/toolsにチェックアウトされる場合があります。Goディストリビューション外の実行可能ファイルは$GOPATH/bin(または、設定されている場合は$GOBIN)にインストールされます。モジュールは$GOPATH/pkg/modにダウンロードされ、キャッシュされます。$GOPATHのデフォルトの場所は$HOME/goであり、通常はGOPATHを明示的に設定する必要はありません。ただし、Goディストリビューションを$HOME/goにチェックアウトした場合は、競合を避けるためにGOPATHを別の場所に設定する必要があります。$GOBINgoコマンドを使用して、Goディストリビューション外の実行可能ファイルがインストールされるディレクトリ。たとえば、
go install golang.org/x/tools/gopls@latestは$GOBIN/goplsをダウンロード、ビルド、インストールします。デフォルトでは、$GOBINは$GOPATH/binです(またはGOPATHが設定されていない場合は$HOME/go/binです)。インストール後、このディレクトリを$PATHに追加して、インストールされたツールを使用できるようにする必要があります。Goディストリビューションの実行可能ファイルは、
$GOBINではなく、$GOROOT/bin(人が呼び出す実行可能ファイルの場合)または$GOTOOLDIR(goコマンドが呼び出す実行可能ファイルの場合。デフォルトは$GOROOT/pkg/$GOOS_$GOARCH)にインストールされることに注意してください。$GOOSおよび$GOARCHターゲットオペレーティングシステムとコンパイルアーキテクチャの名前。これらはそれぞれ
$GOHOSTOSと$GOHOSTARCHの値にデフォルト設定されます(以下で説明)。$GOOSの選択肢は、android、darwin、dragonfly、freebsd、illumos、ios、js、linux、netbsd、openbsd、plan9、solaris、wasip1、windowsです。$GOARCHの選択肢は、amd64(64ビットx86、最も成熟したポート)、386(32ビットx86)、arm(32ビットARM)、arm64(64ビットARM)、ppc64le(PowerPC 64ビット、リトルエンディアン)、ppc64(PowerPC 64ビット、ビッグエンディアン)、mips64le(MIPS 64ビット、リトルエンディアン)、mips64(MIPS 64ビット、ビッグエンディアン)、mipsle(MIPS 32ビット、リトルエンディアン)、mips(MIPS 32ビット、ビッグエンディアン)、s390x(IBM System z 64ビット、ビッグエンディアン)、wasm(WebAssembly 32ビット)です。$GOOSと$GOARCHの有効な組み合わせは次のとおりです。$GOOS$GOARCHaixppc64android386androidamd64androidarmandroidarm64darwinamd64darwinarm64dragonflyamd64freebsd386freebsdamd64freebsdarmillumosamd64iosarm64jswasmlinux386linuxamd64linuxarmlinuxarm64linuxloong64linuxmipslinuxmipslelinuxmips64linuxmips64lelinuxppc64linuxppc64lelinuxriscv64linuxs390xnetbsd386netbsdamd64netbsdarmopenbsd386openbsdamd64openbsdarmopenbsdarm64plan9386plan9amd64plan9armsolarisamd64wasip1wasmwindows386windowsamd64windowsarmwindowsarm64$GOHOSTOSおよび$GOHOSTARCHホストオペレーティングシステムとコンパイルアーキテクチャの名前。これらはローカルシステムのオペレーティングシステムとアーキテクチャにデフォルト設定されます。
有効な選択肢は、上記の
$GOOSおよび$GOARCHと同じです。指定された値はローカルシステムと互換性がある必要があります。たとえば、x86システムで$GOHOSTARCHをarmに設定すべきではありません。$GO386(386のみ、デフォルトはsse2)この変数は、gcが浮動小数点計算をどのように実装するかを制御します。
GO386=softfloat: ソフトウェア浮動小数点演算を使用します。すべてのx86チップ(Pentium MMX以降)をサポートするはずです。GO386=sse2: 浮動小数点演算にSSE2を使用します。パフォーマンスは向上しますが、Pentium 4/Opteron/Athlon 64以降でのみ利用可能です。
$GOARM(armのみ。ターゲットプロセッサでビルドする場合は自動検出、それ以外の場合は7がデフォルト)これは、ランタイムがターゲットとするARM浮動小数点コプロセッサアーキテクチャバージョンを設定します。ターゲットシステムでコンパイルしている場合、その値は自動検出されます。
GOARM=5: ソフトウェア浮動小数点を使用。CPUにVFPコプロセッサがない場合。GOARM=6: VFPv1のみを使用。クロスコンパイルの場合のデフォルト。通常はARM11以降のコア(VFPv2以降もサポートされます)。GOARM=7: VFPv3を使用。通常はCortex-Aコア。
迷ったら、この変数を設定せずに、Go実行可能ファイルを最初に実行したときに必要に応じて調整してください。GoコミュニティWikiのGoARMページには、GoのARMサポートに関する詳細が記載されています。
$GOAMD64(amd64のみ。デフォルトはv1)これは、コンパイルするマイクロアーキテクチャレベルを設定します。有効な値は
v1(デフォルト)、v2、v3、v4です。詳細については、Go wikiのMinimumRequirementsページを参照してください。$GOMIPS(mipsおよびmipsleのみ)
$GOMIPS64(mips64およびmips64leのみ)これらの変数は、浮動小数点命令を使用するかどうかを設定します。浮動小数点命令を使用するには「
hardfloat」に設定します。これがデフォルトです。ソフト浮動小数点を使用するには「softfloat」に設定します。$GOPPC64(ppc64およびppc64leのみ)この変数は、コンパイラがターゲットとするプロセッサレベル(つまり、命令セットアーキテクチャバージョン)を設定します。デフォルトは
power8です。GOPPC64=power8: ISA v2.07命令を生成GOPPC64=power9: ISA v3.00命令を生成
$GORISCV64(riscv64のみ)この変数は、コンパイル対象のRISC-Vユーザーモードアプリケーションプロファイルを設定します。デフォルトは
rva20u64です。$GOWASM(wasmのみ)この変数は、コンパイルされたWebAssemblyバイナリが使用できる実験的なWebAssembly機能のカンマ区切りリストです。デフォルトでは、実験的な機能は使用しません。
GOWASM=satconv: 飽和(非トラッピング)浮動小数点から整数への変換を生成GOWASM=signext: 符号拡張演算子を生成
$GOARCHと$GOOSは、実行している環境ではなく、ターゲット環境を識別することに注意してください。実際には、常にクロスコンパイルしています。アーキテクチャとは、ターゲット環境が実行できるバイナリの種類を意味します。32ビットのみのオペレーティングシステムを実行しているx86-64システムは、GOARCHをamd64ではなく386に設定する必要があります。
デフォルトをオーバーライドすることを選択した場合は、これらの変数をシェルプロファイル($HOME/.bashrc、$HOME/.profileなど)に設定してください。設定は次のようになるかもしれません。
export GOARCH=amd64 export GOOS=linux
ただし、繰り返しますが、Goツリーをビルド、インストール、開発するためにこれらの変数を設定する必要はありません。