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 ワークスペースの構造について説明します。 bin
、pkg
、src
の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