GOPATH を理解する

はじめに

この記事は、GOPATH とは何か、それがどのように機能し、どのようにセットアップするかを理解するための手順を説明します。 これは、Go の開発環境を設定し、Go がどのようにソース ファイルを見つけ、インストールし、ビルドするのかを理解するための重要なステップです。 この記事では、これから説明するフォルダー構造の概念を参照するときに GOPATH を使用します。

Go ワークスペースは、Go がソース ファイル、コンパイル済みバイナリ、および後で高速にコンパイルするために使用するキャッシュ オブジェクトを管理する方法です。 一般的には、Go ワークスペースは 1 つだけ持つことが推奨されますが、複数のスペースを持つことも可能です。 GOPATH はワークスペースのルート フォルダーとして機能します。

Setting the $GOPATH Environment Variable

環境変数 $GOPATH は、Go ワークスペースを探すための場所をリストアップします。 環境変数 $GOPATH を設定することで、これを変更することができます。

変数 $GOPATH の設定に関する詳細は、Go のドキュメントを参照してください。

さらに、このシリーズでは、Go のインストールと Go 開発環境のセットアップを説明します。 通常、$GOROOT/usr/local/go のようなものです。

変数 $GOROOT を特に設定する必要はもうありませんが、古い資料ではまだ参照されています。

さて、Go ワークスペースの構造について説明します。 binpkgsrcの3つのディレクトリがあります。

.├── bin├── pkg└── src └── github.com/foo/bar └── bar.go

これらのディレクトリをそれぞれ見てみましょう。

ディレクトリは、go install がコンパイルするバイナリを配置する場所です。 私たちのオペレーティング システムは、フルパスなしで実行できるバイナリ アプリケーションを見つけるために $PATH 環境変数を使用します。 このディレクトリをグローバル変数 $PATH に追加することをお勧めします。

たとえば、$GOPATH/bin$PATH に追加しないでそこからプログラムを実行する場合、次のように実行する必要があります:

  • $GOPATH/bin/myapp

$GOPATH/bin$PATH に追加されると、次のように同じ呼び出しが可能になります:

  • myapp

$GOPATH/pkgディレクトリは Go によってあらかじめコンパイル済みのオブジェクト ファイルが格納され、その後のプログラムの圧縮をスピードアップさせる場所です。 一般に、ほとんどの開発者はこのディレクトリにアクセスする必要はありません。 コンパイル時に問題が発生した場合は、このディレクトリを安全に削除し、Go が再構築します。

srcディレクトリは、すべての .go ファイル、つまりソース コードが配置されていなければならないところです。 これは、$GOROOT にある Go ツールが使用するソース コードと混同しないでください。 Go アプリケーション、パッケージ、およびライブラリを作成する際には、これらのファイルを $GOPATH/src/path/to/code に配置します。

パッケージとは

Go のコードはパッケージで構成されています。 パッケージは、ディスク上の 1 つのディレクトリにあるすべてのファイルを表します。 1 つのディレクトリには、同じパッケージから特定のファイルのみを含めることができます。 パッケージは、ユーザーが書いたすべての Go ソース ファイルと一緒に、$GOPATH/src ディレクトリの下に格納されます。

私たちのコードが $GOPATH/src/blue/red にある場合、そのパッケージ名は red です。

redパッケージの import 文は次のようになります:

import "blue/red"

ソース コード リポジトリにあるパッケージ、例えば GitHub や BitBucket はその import パスにリポジトリのフルロケーションを含んでいます。

たとえば、次のインポート パスを使用して、https://github.com/gobuffalo/buffalo にあるソース コードをインポートします。 また、環境変数 $GOPATH を設定することにより、その場所をデフォルトの $HOME/go からユーザーの選択に変更する方法についても説明しました。 最後に、Go がそのフォルダー構造内でどのようにパッケージを検索するかについて説明しました。

Go 1.11 で導入された Go モジュールは、Go ワークスペースと GOPATH の置き換えを目的としています。 モジュールを使い始めることが推奨されますが、企業環境など、一部の環境ではモジュールを使う準備ができていないかもしれません。

GOPATHは Go のセットアップで厄介な側面の 1 つですが、一度セットアップすれば、通常、忘れることができます。

Leave a Reply