序章

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

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

前提条件

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

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

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

  1. sudo apt-get update

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

The x フラグはeX tractの略で、 v 言う tar V 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ビルドスクリプトを実行すると、次の環境変数に基づいてGo1.4が検索されます。 GOROOT_BOOTSTRAP. その変数が設定されていない場合(デフォルトでは設定されています)、ビルドスクリプトは go1.4 ディレクトリはホームディレクトリにあります。 あなたは使用することができます GOROOT_BOOTSTRAP Go1.4を別の場所に移動する場合は変数。 ここでは、に移動します /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

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

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

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

  1. cd go

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

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

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

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

ここでは、Go 1.7.4を使用します。つまり、 go1.7.4 ブランチ。

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

ブランチを変更するには、 git checkout 指図。 これらのコマンドはroot権限で実行する必要があります。 /usr/local/usr/local/go1.4 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.

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

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

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

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

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

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

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

Goの使用を開始するには、Goバイナリパスを追加する必要があります。 /usr/local/go/bin、へ PATHGOPATH 環境変数。 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、World」Goファイルを作成します。 hello.go.

  1. nano hello.go

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

hello.go
package main

import "fmt"

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

この例では、 fmt 次のようなI/O機能を実装するパッケージ Printf()、およびを定義します main() プログラムの実行時にHelloWorldを出力する関数。

それを保存してファイルを終了し、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

次に、前と同じようにビルドスクリプトを実行し、必ず追加します。 -E 手順3でGo1.4を再配置した場合はフラグを立てます。

  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.

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

結論

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

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