ソースからGoをインストールする

このトピックでは、Goをソースコードからビルドして実行する方法について説明します。インストーラーを使用してインストールする場合は、「ダウンロードとインストール」を参照してください。

はじめに

Goは、BSDスタイルのライセンスで配布されているオープンソースプロジェクトです。このドキュメントでは、ソースをチェックアウトし、自分のマシンでビルドし、実行する方法について説明します。

ほとんどのユーザーはこれを行う必要がなく、代わりに「ダウンロードとインストール」で説明されているように、はるかに簡単なプロセスであるプリコンパイル済みバイナリパッケージからインストールします。ただし、これらのプリコンパイル済みパッケージに含まれるものを開発するのに協力したい場合は、読み続けてください。

公式のGoコンパイラツールチェーンは2つあります。このドキュメントでは、gc Goコンパイラとツールに焦点を当てています。GCCバックエンドを使用するより伝統的なコンパイラであるgccgoでの作業方法については、「gccgoのセットアップと使用」を参照してください。

Goコンパイラは次の命令セットをサポートしています

amd64386
x86命令セット、64ビットおよび32ビット。
arm64arm
ARM命令セット、64ビット(AArch64)および32ビット。
loong64
64ビットLoongArch命令セット。
mips64mips64lemipsmipsle
MIPS命令セット、ビッグエンディアンおよびリトルエンディアン、64ビットおよび32ビット。
ppc64ppc64le
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のターゲットバージョンによって異なります。

ブートストラップツールチェーンを取得するには、4つの方法があります。

これらのアプローチについては、以下で詳しく説明します。

バイナリリリースからのブートストラップツールチェーン

バイナリリリースをブートストラップツールチェーンとして使用するには、ダウンロードページを参照するか、最小バージョン要件を満たす他のパッケージ化された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インストールをビルドするには、まずgccclangなどの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コードの書き方のドキュメントには、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コンパイル環境は環境変数でカスタマイズできます。ビルドではどれも必須ではありませんが、デフォルトをオーバーライドするためにいくつか設定したい場合があるかもしれません。

$GOARCH$GOOSは、実行している環境ではなく、ターゲット環境を識別することに注意してください。実際には、常にクロスコンパイルしています。アーキテクチャとは、ターゲット環境が実行できるバイナリの種類を意味します。32ビットのみのオペレーティングシステムを実行しているx86-64システムは、GOARCHamd64ではなく386に設定する必要があります。

デフォルトをオーバーライドすることを選択した場合は、これらの変数をシェルプロファイル($HOME/.bashrc$HOME/.profileなど)に設定してください。設定は次のようになるかもしれません。

export GOARCH=amd64
export GOOS=linux

ただし、繰り返しますが、Goツリーをビルド、インストール、開発するためにこれらの変数を設定する必要はありません。