Ubuntu 18.04でGoをインストールしてローカルプログラミング環境をセットアップする方法

前書き

Goは、Googleの欲求不満から生まれたプログラミング言語です。 開発者は、効率的に実行されるがコンパイルに長い時間を要する言語を選択するか、プログラミングは容易であるが生産では非効率的に実行される言語を選択する必要がありました。 Goは、3つのすべてを同時に使用できるように設計されています。つまり、高速コンパイル、プログラミングの容易さ、および本番環境での効率的な実行です。

Goは、さまざまなプログラミングプロジェクトで使用できる汎用性の高いプログラミング言語ですが、ネットワーキング/分散システムプログラムに特に適し、「クラウドの言語」としての評価を得ています。 現代のプログラマーが強力なツールセットでより多くのことができるように支援し、フォーマットを言語仕様の一部にすることでフォーマットに関する議論を取り除き、単一のバイナリにコンパイルすることで展開を容易にします。 Goは非常に少ないキーワードセットで習得しやすく、初心者にも経験豊富な開発者にも最適な選択肢です。

このチュートリアルでは、コマンドラインからGoを使用してプログラミングワークスペースをインストールおよび構成する方法を説明します。 このチュートリアルでは、Ubuntu 18.04のインストール手順を明示的に説明しますが、一般的な原則は他のDebian Linuxディストリビューションにも適用できます。

前提条件

Ubuntu 18.04がインストールされたコンピューターまたは仮想マシンに加えて、そのマシンへの管理アクセスとインターネット接続が必要になります。 このオペレーティングシステムは、Ubuntu 18.04 releases pageからダウンロードできます。

[[step-1 -—- setting-up-go]] ==ステップ1—Goの設定

このステップでは、official Go downloads pageから現在のリリースをダウンロードしてGoをインストールします。

これを行うには、現在のバイナリリリースのtarballのURLを見つけます。 このハッシュをverify the downloaded fileに使用するため、その横にリストされているSHA256ハッシュにも注意する必要があります。

コマンドラインでインストールとセットアップを完了します。これは、コンピューターと対話する非グラフィカルな方法です。 つまり、ボタンをクリックする代わりに、テキストを入力し、テキストを介してコンピューターからフィードバックを受け取ります。

shellまたはterminalとも呼ばれるコマンドラインは、コンピューターで毎日実行するタスクの多くを変更および自動化するのに役立ち、ソフトウェア開発者にとって不可欠なツールです。 より強力なことを実行できるようにするために、学ぶべき多くの端末コマンドがあります。 コマンドラインの詳細については、Introduction to the Linux Terminalチュートリアルを確認してください。

Ubuntu 18.04では、画面の左上隅にあるUbuntuアイコンをクリックし、検索バーにterminalと入力すると、ターミナルアプリケーションを見つけることができます。 ターミナルアプリケーションアイコンをクリックして開きます。 または、キーボードのCTRLALT、およびTキーを同時に押して、ターミナルアプリケーションを自動的に開くこともできます。

Ubuntu Terminal

ターミナルが開いたら、Goバイナリを手動でインストールします。 apt-getなどのパッケージマネージャーを使用することもできますが、手動のインストール手順を実行すると、有効なGoワークスペースを作成するために必要なシステムの構成変更を理解するのに役立ちます。

Goをダウンロードする前に、ホーム(~)ディレクトリにいることを確認してください。

cd ~

curlを使用して、公式のGoダウンロードページからコピーしたtarballURLを取得します。

curl -O https://dl.google.com/go/go1.12.1.linux-amd64.tar.gz

次に、sha256sumを使用してtarballを確認します。

sha256sum go1.12.1.linux-amd64.tar.gz

上記のコマンドの実行から表示されるハッシュは、ダウンロードページにあったハッシュと一致する必要があります。 そうでない場合、これは有効なファイルではないため、ファイルを再度ダウンロードする必要があります。

Output2a3fdabf665496a0db5f41ec6af7a9b15a49fbe71a85a50ca38b1f13a103aeec  go1.12.1.linux-amd64.tar.gz

次に、ダウンロードしたアーカイブを抽出し、システム上の目的の場所にインストールします。 /usr/local未満に保つことがベストプラクティスと見なされます。

sudo tar -xvf go1.12.1.linux-amd64.tar.gz -C /usr/local

これで、/usr/localディレクトリにgoというディレクトリが作成されます。 次に、このディレクトリの所有者とグループを再帰的にrootに変更します。

sudo chown -R root:root /usr/local/go

これにより、すべてのファイルが保護され、rootユーザーのみがGoバイナリを実行できるようになります。

[.note]#Note/usr/local/goは公式に推奨される場所ですが、一部のユーザーは別のパスを好むか、必要とする場合があります。

このステップでは、Ubuntu 18.04マシンにGoをダウンロードしてインストールしました。 次の手順では、Goワークスペースを構成します。

[[step-2 -—- creating-your-go-workspace]] ==ステップ2—Goワークスペースの作成

Goがインストールされたので、プログラミングワークスペースを作成できます。 Goワークスペースのルートには2つのディレクトリが含まれます。

  • src:Goソースファイルを含むディレクトリ。 ソースファイルは、Goプログラミング言語を使用して記述するファイルです。 Goコンパイラは、ソースファイルを使用して実行可能なバイナリファイルを作成します。

  • bin:Goツールによってビルドおよびインストールされた実行可能ファイルを含むディレクトリ。 実行可能ファイルは、システムで実行され、タスクを実行するバイナリファイルです。 これらは通常、ソースコードまたは他のダウンロードされたGoソースコードによってコンパイルされたプログラムです。

srcサブディレクトリには、複数のバージョン管理リポジトリ(GitMercurialBazaarなど)が含まれる場合があります。 これにより、プロジェクト内のコードの標準的なインポートが可能になります。 Canonicalインポートは、github.com/digitalocean/godoなどの完全修飾パッケージを参照するインポートです。

プログラムがサードパーティのライブラリをインポートすると、github.comgolang.orgなどのディレクトリが表示されます。 github.comのようなコードリポジトリを使用している場合は、プロジェクトとソースファイルもそのディレクトリに配置します。 このステップの後半で、この概念を検討します。

典型的なワークスペースは次のようになります。

.
├── bin
│   ├── buffalo                                      # command executable
│   ├── dlv                                          # command executable
│   └── packr                                        # command executable
└── src
    └── github.com
        └── digitalocean
            └── godo
                ├── .git                            # Git repository metadata
                ├── account.go                      # package source
                ├── account_test.go                 # test source
                ├── ...
                ├── timestamp.go
                ├── timestamp_test.go
                └── util
                    ├── droplet.go
                    └── droplet_test.go

1.8以降のGoワークスペースのデフォルトディレクトリは、goサブディレクトリまたは$HOME/goを持つユーザーのホームディレクトリです。 1.8より前のバージョンのGoを使用している場合でも、ワークスペースに$HOME/goの場所を使用することがベストプラクティスと見なされます。

次のコマンドを発行して、Goワークスペースのディレクトリ構造を作成します。

mkdir -p $HOME/go/{bin,src}

-pオプションは、現在存在しない場合でも、ディレクトリ内にすべてのparentsを作成するようにmkdirに指示します。 {bin,src}を使用すると、mkdirへの一連の引数が作成され、binディレクトリとsrcディレクトリの両方を作成するように指示されます。

これにより、次のディレクトリ構造が適切に配置されます。

└── $HOME
    └── go
        ├── bin
        └── src

Go 1.8より前は、$GOPATHというローカル環境変数を設定する必要がありました。 $GOPATHは、インポートされたサードパーティのソースコードと、作成したローカルソースコードの場所をコンパイラに通知しました。 明示的には必須ではありませんが、設定されているこの変数に依拠するサードパーティ製ツールが多いため、依然として優れたプラクティスと考えられています。

~/.profileにグローバル変数を追加することで、$GOPATHを設定できます。 シェル構成に従って、これを.zshrcまたは.bashrcファイルに追加することをお勧めします。

まず、nanoまたはお好みのテキストエディタで~/.profileを開きます。

nano ~/.profile

ファイルに以下を追加して、$GOPATHを設定します。

~/.profile

export GOPATH=$HOME/go

Goがツールをコンパイルしてインストールすると、ツールは$GOPATH/binディレクトリに配置されます。 便宜上、ワークスペースの/binサブディレクトリを~/.profilePATHに追加するのが一般的です。

~/.profile

export PATH=$PATH:$GOPATH/bin

これにより、システムの任意の場所でGoツールを使用してコンパイルまたはダウンロードしたプログラムを実行できます。

最後に、goバイナリをPATHに追加する必要があります。 これを行うには、行末に/usr/local/go/binを追加します。

~/.profile

export PATH=$PATH:$GOPATH/bin:/usr/local/go/bin

$PATH/usr/local/go/binを追加すると、すべてのGoツールがシステムのどこからでも使用できるようになります。

シェルを更新するには、次のコマンドを発行してグローバル変数をロードします。

. ~/.profile

echoコマンドを使用し、出力を調べることで、$PATHが更新されていることを確認できます。

echo $PATH

ホームディレクトリに表示される$GOPATH/binが表示されます。 rootとしてログインしている場合、パスに/root/go/binが表示されます。

Output/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/root/go/bin:/usr/local/go/bin

/usr/local/go/binのGoツールへのパスも表示されます。

Output/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/root/go/bin:/usr/local/go/bin

Goの現在のバージョンを確認して、インストールを確認します。

go version

そして、次のような出力を受け取るはずです。

Outputgo version go1.12.1 linux/amd64

ワークスペースのルートが作成され、$GOPATH環境変数が設定されたので、次のディレクトリ構造を使用して将来のプロジェクトを作成できます。 この例では、リポジトリとしてgithub.comを使用していることを前提としています。

$GOPATH/src/github.com/username/project

したがって、例として、https://github.com/digitalocean/godoプロジェクトで作業している場合、次のディレクトリに保存されます。

$GOPATH/src/github.com/digitalocean/godo

このプロジェクト構造により、go getツールでプロジェクトを使用できるようになります。 また、後で読みやすくなります。 これは、go getコマンドを使用して確認し、godoライブラリをフェッチできます。

go get github.com/digitalocean/godo

これにより、godoライブラリの内容がダウンロードされ、マシンに$GOPATH/src/github.com/digitalocean/godoディレクトリが作成されます。

ディレクトリを一覧表示することで、godoパッケージが正常にダウンロードされたかどうかを確認できます。

ll $GOPATH/src/github.com/digitalocean/godo

次のような出力が表示されます。

Outputdrwxr-xr-x 4 root root  4096 Apr  5 00:43 ./
drwxr-xr-x 3 root root  4096 Apr  5 00:43 ../
drwxr-xr-x 8 root root  4096 Apr  5 00:43 .git/
-rwxr-xr-x 1 root root     8 Apr  5 00:43 .gitignore*
-rw-r--r-- 1 root root    61 Apr  5 00:43 .travis.yml
-rw-r--r-- 1 root root  2808 Apr  5 00:43 CHANGELOG.md
-rw-r--r-- 1 root root  1851 Apr  5 00:43 CONTRIBUTING.md
.
.
.
-rw-r--r-- 1 root root  4893 Apr  5 00:43 vpcs.go
-rw-r--r-- 1 root root  4091 Apr  5 00:43 vpcs_test.go

この手順では、Goワークスペースを作成し、必要な環境変数を構成しました。 次のステップでは、コードを使用してワークスペースをテストします。

[[step-3 -—- creating-a-simple-program]] ==ステップ3—単純なプログラムの作成

Goワークスペースがセットアップされたので、「Hello、World!」プログラムを作成します。 これにより、ワークスペースが適切に構成されていることを確認し、Goに慣れる機会を提供します。 実際のプロジェクトではなく、単一のGoソースファイルを作成しているため、これを行うためにワークスペースにいる必要はありません。

ホームディレクトリから、nanoなどのコマンドラインテキストエディタを開き、新しいファイルを作成します。

nano hello.go

新しいファイルにプログラムを記述します。

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

このコードはfmtパッケージを使用し、引数としてHello, World!を指定してPrintln関数を呼び出します。 これにより、プログラムの実行時にフレーズHello, World!が端末に出力されます。

CTRLおよびXキーを押して、nanoを終了します。 ファイルを保存するように求められたら、Yを押してからENTERを押します。

nanoを終了してシェルに戻ったら、次のプログラムを実行します。

go run hello.go

hello.goプログラムにより、端末は次の出力を生成します。

OutputHello, World!

この手順では、基本的なプログラムを使用して、Goワークスペースが適切に構成されていることを確認しました。

結論

おめでとうございます。 この時点で、UbuntuマシンにGoプログラミングワークスペースがセットアップされ、コーディングプロジェクトを開始できます!