ソースからの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をビルドする準備ができています。または、$GOROOT_BOOTSTRAPを新しいGoツールチェーンのビルドに使用するGoインストールのルートに設定することもできます。$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ソースコードを変更し、変更をプロジェクトにコントリビューションする場合は、リポジトリをリリースタグからmaster(開発)ブランチに移動します。それ以外の場合は、このステップをスキップしてください。

$ 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 issue trackerを使用して報告できます。

リリース情報の把握

新しいリリースは、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ツリーをビルド、インストール、および開発するためにこれらの変数のいずれも設定する必要はありません。