~/src/go-statsd-client> echo $GOPATH
/Users/me/gopath
~/src/go-statsd-client> echo $GOROOT
/usr/local/Cellar/go/1.1.1\
~/src/go-statsd-client> go install
go install: no install location for directory /Users/me/src/go-statsd-client outside GOPATH
これがプロジェクトの構造に関係なく、常に同じメッセージで失敗します。 Goビルドは完全に機能します。
これが私のgo env
です
GOARCH="AMD64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="AMD64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/me/gopath"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.1.1"
GOTOOLDIR="/usr/local/Cellar/go/1.1.1/pkg/tool/darwin_AMD64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common"
CGO_ENABLED="1"
これはMac OSX Mountain Lionにあり、goはhomebrewでインストールされました。
go install
に引数を指定しないと、デフォルトで現在のディレクトリにパッケージをインストールしようとします。エラーメッセージは、現在のディレクトリが$GOPATH
の一部ではないため、それができないことを示しています。
次のいずれかを実行できます。
$GOPATH
を$ HOME(export GOPATH=$HOME
)に定義します。$GOPATH
(mv ~/src/go-statsd-client /User/me/gopath
)内に移動します。いずれかの後に、go-statsd-client
ディレクトリに移動してgo install
を入力すると動作し、ファイルシステムのどこからでもgo install go-statsd-client
を入力します。ビルドされたバイナリは$GOPATH/bin
に入ります。
無関係な提案として、おそらく名前の衝突を避けるためにドメイン名でパッケージに名前空間を付けたいでしょう(例えば、ソースコードを保持している場合はgithub.com/you/go-statsd-client
)。
OS Xユーザーと将来の私にとっては、GOBIN
を設定して、インストール時のこの混乱を招くメッセージとgo get
を避ける必要もあります。
mkdir bin
export GOBIN=$GOPATH/bin
GOPATHフォルダー外のディレクトリでgo installを使用しています。 GOBIN環境変数を設定するか、GOPATH内でsrcフォルダーを移動します。
GOPATH/
bin/
src/
go-statsd-client/
詳細: GO BUILDソースコード 、行296
GOPATH
とGOBIN
の両方をセットアップする必要があります。次のことを確認してください(~/go
をお好みのGOPATH
に置き換えてから、GOBIN
を変更してください)。これはUbuntu 16.04 LTS
でテストされます。
export GOPATH=~/go
mkdir ~/go/bin
export GOBIN=$GOPATH/bin
選択した答えは私にとって問題を解決しませんでした。
選択したGOPATHディレクトリ内に3つのディレクトリが必要です。
GOPATH
/bin
/src
/someProgram
program.go
/someLibrary
library.go
/pkg
次に、someProgram(実行可能ファイルをbinに配置)またはsomeLibrary(pkgにライブラリを配置)のいずれかからgo install
を実行します。
Windowsでこの問題が発生しました。
私の問題は、%GOPATH%
環境変数が
C:\Users\john\src\goworkspace
の代わりに
C:\Users\john\src\goworkspace\
最後に欠落している末尾のスラッシュを追加すると、修正されました。
私の場合(OS X)は、GOPATH
を/home/username/go
ではなく/Users/username/go
に設定しているためです(本のとおり)。
それが価値があるのは、Homebrewでgoをインストールした後、Atomを搭載したMacでうまく機能する私の.bash_profileです:
export GOROOT=`go env GOROOT`
export GOPATH=/Users/yy/Projects/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
私はWindowsを使用していますが、コマンドgo help gopath
をcmdに渡し、命令の太字のテキストを読んで、
つまり、インストールするコードが..BaseDir...\SomeProject\src\basic\set
にある場合、GOPATHはコードと同じ場所ではなく、単にBase Project DIRでなければなりません:..BaseDir...\SomeProject
。
GOPATH環境変数には、Goコードを探す場所がリストされています。 Unixでは、値はコロンで区切られた文字列です。 Windowsでは、値はセミコロンで区切られた文字列です。プラン9では、値はリストです。
環境変数が設定されていない場合、GOPATHはユーザーのホームディレクトリ(Unixでは$ HOME/go、Windowsでは%USERPROFILE%\ go)の "go"という名前のサブディレクトリにデフォルトで設定されます。 「go env GOPATH」を実行して、現在のGOPATHを確認します。
https://golang.org/wiki/SettingGOPATH を参照して、カスタムGOPATHを設定してください。
GOPATHにリストされている各ディレクトリには、規定の構造が必要です。
Srcディレクトリにはソースコードが含まれています。 src以下のパスにより、インポートパスまたは実行可能ファイル名が決まります。
Pkgディレクトリには、インストールされたパッケージオブジェクトが保持されます。 Goツリーと同様に、各ターゲットオペレーティングシステムとアーキテクチャのペアには、pkgの独自のサブディレクトリ(pkg/GOOS_GOARCH)があります。
DIRがGOPATHにリストされているディレクトリである場合、DIR/src/foo/barにソースがあるパッケージは「foo/bar」としてインポートでき、コンパイルされた形式は「DIR/pkg/GOOS_GOARCH/foo/bar.a "。
Binディレクトリには、コンパイルされたコマンドが保持されます。各コマンドにはソースディレクトリの名前が付けられますが、パス全体ではなく、最終要素のみに名前が付けられます。つまり、DIR/src/foo/quuxにソースがあるコマンドは、DIR/bin/foo/quuxではなく、DIR/bin/quuxにインストールされます。 「foo /」プレフィックスは削除され、DIR/binをPATHに追加して、インストールされたコマンドを取得できます。 GOBIN環境変数が設定されている場合、コマンドはDIR/binの代わりに、指定されたディレクトリにインストールされます。 GOBINは絶対パスでなければなりません。
ディレクトリレイアウトの例を次に示します。
GOPATH=/home/user/go /home/user/go/ src/ foo/ bar/ (go code in package bar) x.go quux/ (go code in package main) y.go bin/ quux (installed command) pkg/ linux_AMD64/ foo/ bar.a (installed package object)
..........
gOPATHがBase Project DIRに設定されていて、まだこの問題がある場合は、WindowsでGOBINをBase Project DIR\bin
または%GOPATH%\bin
として設定してみてください。
OSX Mojave 10.14では、go
は通常に/usr/local/go
にインストールされます。
したがって、これらのENVをセットアップすれば、準備完了です。
export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin
また、機能する場合は、これらをbash_profile
またはzsh_profile
に追加します。
echo "export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin" >> ~/.bash_profile && source ~/.bash_profile
Windowsでは、GOPATH環境変数を設定したときに、cmdウィンドウが既に開いていました。最初にcmdを閉じてから再度開き、有効にする必要がありました。
このスレッドや他の場所で定義されている修正方法はいくつかありますが、ほとんどの人が見落としているのは、現在の問題を修正するだけではなく、プロジェクト設計で意図したものから間違っている場合にも対処しようとしていますまたはプロジェクトの作成者が希望します。
まず、$ GOPATH変数を修正する必要があります。 Soln:プロジェクトのベースパスに設定します。次に、プロジェクトへのエントリポイントを定義する必要があります。通常、「main」を使用して定義されます。
これは、プロジェクトの実行がベース作業ディレクトリとプログラムの作業ポイントを理解する方法です。
実行中は注意してください
export GOPATH=$HOME
GOPATH
に関連する特定の場所にコードが存在すると仮定します。そのため、代わりにdockerを使用してgoコマンドを実行できます。
docker run -it -v $(pwd):/go/src/github.com/<organization name>/<repository name> golang
これで、たとえば次のようなgolangコマンドを使用できます。
go test github.com/<organization name>/<repository name>
問題は、go main関数を含むgoファイルがあるパッケージディレクトリにいないため、go installでインストールするコマンド(go main関数を含むgoファイル)が見つからないことです。
$ cd /path/to/file-with-main-function.go
次に実行します:
$ go install