序章

Go は、Googleが開発した最新のオープンソースプログラミング言語です。 シンプルで堅牢なライブラリとツールのセットを備えているため、信頼性が高く効率的なアプリケーションを簡単に構築できます。

Goアプリケーションを最新バージョンの言語に対してテストしたり、Goコードベースに貢献したり、Goバージョン管理を改善したりする場合は、ソースからGoをビルドする必要があります。 このチュートリアルでは、Goを構築する方法、いくつかの実用的な考慮事項をカバーする方法、および「Hello、World」テストアプリケーションを構築する方法を示します。

前提条件

このチュートリアルに従うには、次のものが必要です。

ステップ1—ビルドの依存関係をインストールする

開始する前に、リポジトリキャッシュが最新であることを確認してください。

  1. sudo apt-get update

デフォルトでは、Ubuntuには、コンパイラ、ライブラリ、ツールなど、Goのビルドに必要なすべてのパッケージが付属しているわけではありません。 build-essentialをインストールすると、ビルドとコンパイルの依存関係を簡単にインストールできます。このパッケージには、Cをコンパイルするためのgcc、C++をコンパイルするためのg++、およびmakeが含まれています。自動化ツールを構築します。

  1. sudo apt-get install build-essential

インストールが完了すると、ソースからGoをビルドするために必要なすべてのツールが手に入ります。 次に、Go1.4バイナリが必要になります。

ステップ2—Go1.4.3のインストール

Go 1.5+をビルドするには、Go1.4が必要です。 これは、Go1.5以降のツールチェーンがGo自体で記述されているためです。 Go 1.4または任意のポイントリリース(1.4.1、1.4.2、または1.4.3)を使用できます。 このチュートリアルでは、Go1.4.3を使用します。

SHA1チェックサムを使用したGoバイナリは、Goのダウンロードページにあります。 go1.4.3.linux-amd64.tar.gzというファイルをホームディレクトリにダウンロードします。

  1. cd ~
  2. curl -O https://storage.googleapis.com/golang/go1.4.3.linux-amd64.tar.gz

このファイルは本物のソースからダウンロードされましたが、ダウンロードしたものの整合性を検証することは、セキュリティ上の優れた方法です。 これは、ダウンロードページで提供されるファイルハッシュとダウンロードされたファイルのハッシュを比較することで最も簡単に実行できます。

まず、ダウンロードしたファイルのハッシュを取得します。

  1. sha1sum go1.4.3.linux-amd64.tar.gz

このコマンドの出力を、Goダウンロードページで提供されているチェックサムと比較します。

  1. Output
    332b64236d30a8805fc8dd8b3a269915b4c507fe go1.4.3.linux-amd64.tar.gz

チェックサムが一致する場合は、ファイルを解凍できます。

  1. tar xvf go1.4.3.linux-amd64.tar.gz

xフラグはeX tractを表し、vtarV erbose出力を使用するように指示します(つまり、 抽出されるファイルを一覧表示します)、fを使用すると、 Filenameを指定できます。

Go 1.4は、goというディレクトリで解凍されますが、Goビルドスクリプトは、デフォルトで~/go1.4 でGo1.4バイナリを検索します。 mvコマンドを使用してディレクトリの名前を変更します。

  1. mv go go1.4

これで、ソースからGoをビルドするために必要な依存関係ができました。 Go 1.4をホームディレクトリから別の場所に移動する場合は、次の手順に従います。 そうでない場合は、ステップ4に進んでGoソースのクローンを作成できます。

ステップ3— Go 1.4.3の再配置(オプション)

Goビルドスクリプトを実行すると、GOROOT_BOOTSTRAPという環境変数に基づいてGo1.4が検索されます。 その変数が設定されていない場合(デフォルト)、ビルドスクリプトはgo1.4ディレクトリがホームディレクトリにあると想定します。 Go 1.4を別の場所に移動する場合は、GOROOT_BOOTSTRAP変数を使用できます。 ここでは、/usr/local/go1.4に移動します。

まず、ディレクトリ自体を移動します。

  1. sudo mv go1.4 /usr/local

次に、~/.profileファイルを変更して、環境内のパスを設定する必要があります。

  1. sudo nano ~/.profile

ファイルの最後に、次の行を追加します。

〜/ .profile
. . .
export GOROOT_BOOTSTRAP=/usr/local/go1.4

ファイルを保存して終了します。 この変更を有効にするには、プロファイルを更新してください。

  1. source ~/.profile

次に、Goソースのクローンを作成します。

ステップ4—Goソースを取得する

Goバイナリを保存するための推奨される場所は、/usr/localです。これは、このチュートリアルで使用する場所です。 ただし、好きな場所に保存できます。

/usr/localに移動し、Gitを使用してリポジトリのクローンを作成します。

  1. cd /usr/local
  2. sudo git clone https://go.googlesource.com/go

/usr/localrootが所有しているため、root権限でgit cloneを実行する必要があります。 クローンを作成している場合ユーザーが書き込み権限を持っているディレクトリに移動すると、sudoなしでこのコマンドを実行できます。

注: Goを/usr/local以外の場所に保存するには、GOROOT環境変数を設定する必要があります。 Go環境変数の詳細については、ステップ7を参照してください。

クローンが正常に完了すると、/usr/localgoディレクトリが作成されます。 そのディレクトリに移動します。

  1. cd go

ビルドする前に、必要なGoバージョンを選択する必要があります。

ステップ5—Goバージョンの選択

Goソースには、利用可能なバージョンごとに異なるGitブランチがあります。 ブランチの名前は次のとおりです。

  • master開発中の最新バージョン
  • 安定版の場合はgoversion

ここでは、Go 1.7.4を使用します。これは、go1.7.4ブランチを使用することを意味します。

警告:開発バージョン(つまり、 Goのmasterブランチ)が本番環境にあります。 テストされておらず、バグがある可能性があります。 開発バージョンはアプリケーションのテストに適していますが、本番環境ではリリースされたバージョンのみを使用します。

ブランチを変更するには、git checkoutコマンドを使用します。 /usr/local/usr/local/go1.4rootが所有しているため、これらのコマンドはroot権限で実行する必要があります。

  1. sudo git checkout go1.7.4

この手順が完了すると、好みのバージョンのGoソースコードがダウンロードされます。 これで、このチュートリアルの重要な部分であるGo自体の構築に進む準備ができました。

ステップ6—ビルドゴー

goをビルドするには、ソースコードに付属しているbashスクリプトsrc/all.bashを実行する必要があります。 スクリプトは、必要な依存関係がすべてあることを確認し、いくつかのテストを実行して、ビルドを完了します。

スクリプトを実行しますが、Go 1.4.3バイナリの場所を変更した場合は、-Eフラグを追加する必要があることに注意してください(つまり、 sudo -E bash ./all.bash)環境変数を保持します。

  1. cd src
  2. sudo bash ./all.bash

スクリプトが完了するまでに少し時間がかかります。 ビルドが完了すると、次の出力が表示されます。

Output of src/all.bash
ALL TESTS PASSED --- Installed Go for linux/amd64 in /usr/local/go Installed commands in /usr/local/go/bin *** You need to add /usr/local/go/bin to your PATH.

警告: timeテストが失敗したために、Go1.7でビルドが失敗する場合があります。 これはバグの結果です。

Failed test output
--- FAIL: TestLoadFixed (0.00s) time_test.go:943: Now().In(loc).Zone() = "-01", -3600, want "GMT+1", -3600 FAIL FAIL time 2.403s ... 2016/12/09 22:16:40 Failed: exit status 1

この問題の回避策は、バグ修正を手動で適用することです。 これを行うには、新しいブランチを作成し、修正を加えたコミットを選択します。 Gitのチェリーピッキングは、特定のコミットからブランチに変更を適用するプロセスです。

このバグはcommitc5434f2 で修正されたので、新しく作成したブランチに追加してください。

  1. cd ..
  2. sudo git checkout -b go1.7.4-timefix
  3. sudo git cherry-pick c5434f2973a87acff76bac359236e690d632ce95

これを行った後、スクリプトを再度実行できます。 (Go 1.4.3バイナリを移動した場合は、-Eフラグを忘れないでください。)

  1. cd src
  2. sudo bash ./all.bash

Goが構築されたので、いくつかの環境変数を設定する必要があります。

ステップ7—Go変数の設定

環境変数は、Goのインストールをカスタマイズするための強力な方法です。 最も重要で有用なものをウォークスルーします。

Goの使用を開始するには、Goバイナリパス/usr/local/go/binPATHおよびGOPATH環境変数に追加する必要があります。 GOPATHは、Goアプリケーションコードとバイナリが保存される場所です。これは~/workとして指定しますが、これは自由にカスタマイズできます。

これらの変数を~/.profileファイルに追加します。 お気に入りのテキストエディタで開きます。

  1. nano ~/.profile

ファイルの最後に、次の行を追加します。

〜/ .profile
. . .
export GOPATH=$HOME/work
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin

Goをデフォルト以外のパスにインストールした場合、つまり /usr/local/go以外の場合は、GOROOT変数を定義する必要があります。 その場合は、次の行も追加します。

〜/ .profile
export GOROOT=$HOME/go
export GOPATH=$HOME/work
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

ファイルを保存して終了します。 これらの変更を有効にするには、プロファイルを更新してください。

  1. source ~/.profile

この手順が正常に完了すると、完全に機能するGoがインストールされます。 次に、すべてが期待どおりに機能していることを確認するためにテストします。

ステップ8—Goインストールのテスト

テストする一般的な方法は、Goが機能していることです。これは、単純な「Hello、World」アプリケーションを作成して実行することです。

これを行うには、まず、GOPATHに基づいてアプリファイルのディレクトリを作成して移動します。 Goパス内で好きなものを選択できますが、ここでの例として、GitHubを使用してコードを管理する場合に必要な階層の種類を設定します。 ただし、この階層はGitHubアカウントがなくても機能します。

  1. mkdir -p $GOPATH/src/github.com/your_github_username/test_project
  2. cd $GOPATH/src/github.com/your_github_username/test_project

次に、hello.goという名前の「Hello、World」Goファイルを作成します。

  1. nano hello.go

次のコードをファイルに追加します。

hello.go
package main

import "fmt"

func main() {
    fmt.Printf("Hello World!\n")
}

この例では、Printf()などのI/O関数を実装するfmtパッケージを使用し、プログラム時に HelloWorldを出力するmain()関数を定義します。実行されます。

保存してファイルを終了し、Goコマンドinstallを使用してコンパイルします。

  1. go install github.com/your_github_username/test_project

コンパイルが終了したら、次のコマンドで実行できます。

  1. hello

Hello World!が端末に印刷されます。これは、Goのインストールが機能していることを意味します。

ステップ9— Goバージョンの変更(オプション)

このチュートリアルでは、Go1.7.4を設定します。 別のバージョンを使用する場合は、アクティブなGitブランチを変更してGoを再構築する必要があります。

現在のGoバージョンを確認するには、go versionを使用できます。

  1. go version
Output
go version go1.7.4 linux/amd64

例として、Goバージョンを1.6.4に切り替えます。 このバージョンはgo1.6.4ブランチにあるので、それに切り替えます。

  1. cd /usr/local/go
  2. sudo git checkout go1.6.4

すべてが最新であることを確認するには、git pullを実行して、選択したブランチの最新の変更を取得します。

  1. sudo git pull origin go1.6.4

ここで、前と同じようにビルドスクリプトを実行します。手順3でGo 1.4を再配置した場合は、必ず-Eフラグを追加してください。

  1. cd src
  2. sudo bash ./all.bash

これが完了するまでには少し時間がかかります。 ビルドが完了すると、次の出力が表示されます。

Output of src/all.bash
ALL TESTS PASSED --- Installed Go for linux/amd64 in /usr/local/go Installed commands in /usr/local/go/bin *** You need to add /usr/local/go/bin to your PATH.

手順5の~/.profileでGo変数を設定しているので、バージョンを変更するために必要なのはこれだけです。

結論

ソースからビルドしてパスを設定することで、Goアプリケーションを開発およびテストしたり、Goコードベースに貢献したりするための優れたベースが得られます。

詳細については、Goの使用を開始する方法またはGoWebフレームワークであるMartiniを使用してGoアプリケーションを提供する方法を参照してください。 Goオープンソースに貢献するためのインスピレーションを探している場合は、go-qemuおよびgo-libvirtプロジェクトについて読むことができます。