作業ディレクトリは、エンジニアリング開発のための相対参照ディレクトリです。たとえば、社内で一連のサーバー コードを作成する場合、ワークステーションに含まれるデスクトップ、コンピュータ、椅子がワークスペースになります。ワークスペースの概念は、作業ディレクトリの概念と似ています。作業ディレクトリの概念が使用されていない場合、複数人で開発する場合、各人が独自のディレクトリ構造を持ち、設定ファイルの読み込み場所が統一されず、出力されるバイナリ実行ファイルも統一されず、開発の一貫性が失われます。開発効率に影響を与える規格。
GOPATH は、大量の Go 言語ソース コードと複数のパッケージで構成される複雑なプロジェクトの処理に適しています。
ヒント
C、 C++ 、 Java 、 C#などの言語は開発後期に独自のIDE(統合開発環境)を持ち、プロジェクト(Project)、ソリューション(Solution)、ワークスペース(Workspace)などの概念でソースコードを整理し、リソース 立ち上がって、コンパイルと出力が簡単です。
コマンドラインを使用して GOPATH 情報を表示します
「 Go 言語開発キットのインストール」では、Go 言語のインストール方法を紹介しました。 Go 開発キットがインストールされているオペレーティング システムでは、コマンド ラインを使用して Go 開発キットの環境変数構成情報を表示でき、この構成情報では現在の GOPATH パス設定を確認できます。コマンド ラインでgo env
を実行すると、コマンド ラインに次の情報が表示されます。
$ go env
GOARCH=”amd64″
GOBIN=””
GOEXE=””
GOHOSTARCH=”amd64″
GOHOSTOS=”linux”
GOOS=”linux”
GOPATH=”/home/davy/go”
GORACE=””
GOROOT=”/usr/local/go”
GOTOOLDIR=”/usr/local/go/pkg/tool/linux_amd64″
GCC GO=”gccgo”
CC=”gcc”
GOGCCFLAGS=”-fPIC -m64 -pthread -fmessage-length=0″
CXX=”g++”
CGO_ENABLED=”1″
CGO_CFLAGS=”-g -O2″
CGO_CPPFLAGS=””
CGO_CXXFLAGS=”-g -O2″
CGO_FFLAGS=”-g -O2″
CGO_LDFLAGS=”-g -O2″
PKG_CONFIG=”pkg-config”
コマンドラインの説明は次のとおりです。
- 行 1 は go env コマンドを実行し、現在の Go 開発キットの環境変数のステータスを出力します。
- 2 行目の GOARCH は、ターゲット プロセッサ アーキテクチャを示します。
- 3 行目の GOBIN は、コンパイラとリンカーがインストールされている場所を示します。
- 7 行目で、GOOS はターゲット オペレーティング システムを表します。
- 8 行目の GOPATH は、現在の作業ディレクトリを表します。
- 10 行目の GOROOT は、Go 開発パッケージのインストール ディレクトリを示します。
コマンド ライン出力から、GOPATH によって設定されたパスが /home/davy/go (davy は作成者のユーザー名) であることがわかります。
Go 1.8 より前では、GOPATH 環境変数はデフォルトで空でした。 Go バージョン 1.8 以降、Go 開発パッケージがインストールされると、デフォルトのディレクトリが GOPATH に割り当てられます。以下の表を参照してください。
プラットホーム | GOPATH のデフォルト | 例 |
---|---|---|
Windows | %USERPROFILE%/go | C:\ユーザー\ユーザー名\go |
Unix | $HOME/go | /ホーム/ユーザー名/go |
GOPATH を使用したプロジェクト構造
GOPATH で指定された作業ディレクトリでは、コードは常に $GOPATH/src ディレクトリに保存されます。プロジェクトが go build、go install、go get などのコマンドを実行すると、生成されたバイナリ実行可能ファイルは $GOPATH/bin ディレクトリに配置され、生成された中間キャッシュ ファイルは $GOPATH/pkg に保存されます。
ソース コード全体をバージョン管理ツール (バージョン管理システム、VCS) に追加する必要がある場合は、ソース コードを $GOPATH/src ディレクトリに追加するだけで済みます。 bin ディレクトリと pkg ディレクトリの内容は両方とも src ディレクトリから生成できます。
GOPATH のセットアップと使用
このセクションでは、Linux をデモンストレーション プラットフォームとして使用して、GOPATH の使用方法を示します。
1) 現在のディレクトリを GOPATH に設定します
ディレクトリを選択し、ディレクトリ内のコマンド ラインで次のコマンドを実行します。
export GOPATH=`pwd`
このコマンドの pwd は現在のディレクトリを出力します。バッククォート`
を使用して pwd コマンドを囲み、コマンド ライン置換を示します。つまり、 `pwd`
を使用して、pwd によって返される現在のディレクトリの値を取得します。たとえば、現在のディレクトリが「/home/davy/go」の場合、 `pwd`
を使用すると値「/home/davy/go」が返されます。
export コマンドを使用して、現在のディレクトリの値を環境変数 GOPATH に設定します。
2) GOPATH にソースコードディレクトリを作成します。
次のコマンドを使用して、GOPATH に src ディレクトリを作成します。src ディレクトリの下には、ソース コードを保存するために使用される hello ディレクトリがあります。
mkdir -p src/hello
mkdirコマンドの-pは連続してパスを作成できます。
3) main.go ソースコードファイルを追加します。
Linux エディタを使用して、次のソース コードを main.go として保存し、$GOPATH/src/hello ディレクトリに保存します。
package main
import "fmt"
func main(){
fmt.Println("hello")
}
4) ソースコードをコンパイルして実行する
この時点で GOPATH を設定したので、Go 言語では GOPATH を通じてプロジェクトの場所を見つけることができます。
コマンド ラインで次のコマンドを実行して、ソース コードをコンパイルします。
go install hello
コンパイルされた実行可能ファイルは $GOPATH/bin ディレクトリに保存されます。
bin ディレクトリで ./hello を実行すると、コマンド ラインの出力は次のようになります。
こんにちは世界

Go 言語に関連する多くの書籍や記事で説明されている GOPATH は、システムのグローバル環境変数を変更することで実装されます。しかし、著者の長年にわたる Go 言語の使用と実際の経験、および周囲の友人や同僚からのフィードバックによると、グローバル GOPATH を設定するこの方法では、現在のプロジェクトが誤って他のディレクトリにある Go ソース ファイルを参照する可能性があり、その結果、バージョンが間違っているか、コンパイルされた出力のコンパイルが間違っています。理解できないエラー メッセージを報告してください。
たとえば、プロジェクト コードを /home/davy/projectA ディレクトリに保存し、このディレクトリを GOPATH として設定します。開発が進むと、プロジェクトのソースコードを再度取得する必要がありますが、このとき、ソースコードは/home/davy/projectBディレクトリに保存されています。projectBディレクトリ内のプロジェクトをコンパイルする必要がある場合は、この時点でソースコードが保存されます。しかし、開発者が GOPATH の設定を忘れ、コマンド ライン Compile を直接使用すると、現在の GOPATH は、コンパイル時に開発者が予期した projectB ディレクトリではなく、/home/davy/projectA ディレクトリを指します。コンパイルが完了すると、開発者は間違ったプロジェクト バージョンを外部ネットワークに公開します。
したがって、コマンド ラインまたは統合開発環境を使用して Go ソース コードをコンパイルする場合は、GOPATH がプロジェクト設定に従うことをお勧めします。 Jetbrains の GoLand 統合開発環境 (IDE) の GOPATH 設定は、次の図に示すように、グローバル GOPATH とプロジェクト GOPATH に分かれています。
図の Global GOPATH は、一般にシステム環境変数の GOPATH から導出されるグローバル GOPATH を表します。プロジェクト GOPATH は、プロジェクトで使用される GOPATH を表し、この設定は作業ディレクトリの .idea ディレクトリに保存され、環境変数 GOPATH には設定されていませんが、コンパイル時にこのディレクトリが使用されます。開発中はプロジェクトの GOPATH のみを入力し、プロジェクトごとに GOPATH を 1 つだけ設定するようにし、複数の GOPATH やグローバル GOPATH を使用しないことをお勧めします。
ヒント
Visual Studio は初期に、C++ 言語がグローバル インクルード パスを持てるように設計されました。プロジェクトの複数のバージョンがコンパイルされるとき、または 2 つのプロジェクトが異なる共有グローバル インクルードと混在するときに、微妙なエラーが発生することがあります。このグローバルにインクルードされるパスの設計は、Visual Studio の新しいバージョンでは廃止されており、開発者はインクルード ディレクトリをプロジェクトに関連付けることをお勧めします。
Go 言語の GOPATH もグローバル インクルージョンに近い設計となっているため、Visual Studio の設計ミスを考慮し、開発者はグローバル GOPATH を設定せず、プロジェクトで GOPATH を設定することをお勧めします。