GOPATHを理解する
序章
この記事では、GOPATH
とは何か、どのように機能するか、およびどのように設定するかについて説明します。 これは、Go開発環境をセットアップするため、およびGoがソースファイルを検索、インストール、および構築する方法を理解するための重要なステップです。 この記事では、これから説明するフォルダー構造の概念を参照するときに、GOPATH
を使用します。 $GOPATH
を使用して、Goがフォルダー構造を見つけるために使用する環境変数を参照します。
Goワークスペースは、Goがソースファイル、コンパイルされたバイナリ、および後でより高速にコンパイルするために使用されるキャッシュされたオブジェクトを管理する方法です。 複数のスペースを持つことも可能ですが、Goワークスペースは1つだけにするのが一般的であり、推奨されます。 GOPATH
は、ワークスペースのルートフォルダーとして機能します。
$GOPATH
環境変数の設定
$GOPATH
環境変数は、GoがGoワークスペースを探す場所をリストします。
デフォルトでは、GoはGOPATH
の場所が$HOME/go
であると想定しています。ここで、$HOME
はコンピューター上のユーザーアカウントのルートディレクトリです。 これは、$GOPATH
環境変数を設定することで変更できます。 詳細については、Linuxでの環境変数の読み取りと設定に関するこのチュートリアルに従ってください。
$GOPATH
変数の設定の詳細については、Goドキュメントを参照してください。
さらに、このシリーズでは、GoのインストールとGo開発環境のセットアップについて説明します。
$GOPATH
は$GOROOT
ではありません
$GOROOT
は、Goのコード、コンパイラ、およびツールが存在する場所です。これは、ソースコードではなくです。 $GOROOT
は通常、/usr/local/go
のようなものです。 私たちの$GOPATH
は通常、$HOME/go
のようなものです。
$GOROOT
変数を特別に設定する必要はなくなりましたが、古い資料では引き続き参照されています。
それでは、Goワークスペースの構造について説明しましょう。
Goワークスペースの構造
Goワークスペース(GOPATH
)内には、bin
、pkg
、およびsrc
の3つのディレクトリがあります。 これらの各ディレクトリは、Goツールチェーンにとって特別な意味を持っています。
. ├── bin ├── pkg └── src └── github.com/foo/bar └── bar.go
これらの各ディレクトリを見てみましょう。
$GOPATH/bin
ディレクトリは、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つのディレクトリには、同じパッケージの特定のファイルのみを含めることができます。 パッケージは、すべてのユーザー作成のGoソースファイルとともに$GOPATH/src
ディレクトリに保存されます。 さまざまなパッケージをインポートすることで、パッケージの解決を理解できます。
コードが$GOPATH/src/blue/red
にある場合、そのパッケージ名はred
である必要があります。
red
パッケージのインポートステートメントは次のようになります。
import "blue/red"
GitHubやBitBucketなどのソースコードリポジトリに存在するパッケージには、インポートパスの一部としてリポジトリの完全な場所があります。
たとえば、次のインポートパスを使用して、https://github.com/gobuffalo/buffaloでソースコードをインポートします。
import "github.com/gobuffalo/buffalo"
したがって、このソースコードはディスク上の次の場所にあります。
$GOPATH/src/github.com/gobuffalo/buffalo
結論
この記事では、GOPATH
を、Goがソースコード内に存在することを期待するフォルダーのセットとして、またそれらのフォルダーが何であるか、およびそれらに何が含まれるかについて説明しました。 $GOPATH
環境変数を設定して、その場所をデフォルトの$HOME/go
からユーザーが選択した場所に変更する方法について説明しました。 最後に、Goがそのフォルダー構造内のパッケージを検索する方法について説明しました。
Go 1.11で導入された、GoモジュールはGoワークスペースとGOPATH
を置き換えることを目的としています。 モジュールの使用を開始することをお勧めしますが、企業環境などの一部の環境では、モジュールを使用する準備ができていない場合があります。
GOPATH
は、Goを設定する際の難しい側面の1つですが、一度設定すると、通常は忘れることができます。