2013-08-09 7 views
101
~/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ビルドは完全に機能します。GOPATH以外のインストールディレクトリは常にインストールされません

は、ここでこれは、Mac OSXマウンテンライオンにあり、自作と一緒にインストールされた行く私の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" 

です。

答えて

78

あなたはgo installに引数を提供しない、それはデフォルトで現在のディレクトリにパッケージをインストールしようとします。現在のディレクトリが$GOPATHの一部ではないため、エラーメッセージはそれを行うことができないことを伝えています。

次のいずれかを実行できます、あなたの$ HOME(export GOPATH=$HOME)へ

  • 定義$GOPATH
  • ソースを現在の$GOPATHmv ~/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、ソースコードを保持している場合)。

+4

私の場合、このエラーは '$ GOPATH/bin'ディレクトリがないために発生しました。このフォルダを作成する必要がありました - 私は 'GOBIN' env varを設定する必要はありませんでした。 – xentek

+3

@RobertReiz私はあなたの欲求不満を共有していますが、他のほとんどの言語が実際にこれらを使用していることを指摘しておきたいと思います。例えば、Python(その単純さで有名な言語)は 'GOPOO'ではなく' GOROOT'ではなく 'PYTHONHOME'と' GOPATH'ではなく 'PYTHONPATH'を持っています。偶数(GC)Cに 'LIBRARY_PATH'、' C_INCLUDE_PATH'などがあります。 – Hut8

+0

GOPATHが現在のディレクトリではなく、どこにインストールされているのですか?私は同じ依存関係を使って6つのプロジェクトを持っています。私はそれを6回、特に同期させておく必要があるため、インストールしたくありません。 – Sistr

19

使用していますGOPATHフォルダ外のディレクトリにをインストールしてください。 GOBIN env変数を設定するか、srcフォルダーをGOPATH内に移動してください。

GOPATH/ 
    bin/ 
    src/ 
     go-statsd-client/ 

詳細情報:GO BUILD Source code、ライン296

+0

上記の提案(GOPATH = $ HOMEをエクスポート)を試してから、関連するディレクトリ(私のコードを書いています)に移動し、installと同じ結果をインストールしました。 – stian

+0

296行目は単なる返信文ですか? –

+1

GOBIN env – cevaris

3

Windowsでこの問題が発生しました。

私の問題は私の%GOPATH%環境変数が私のためにそれを固定端に欠けている最後のスラッシュを追加する代わりに

C:\Users\john\src\goworkspace\

C:\Users\john\src\goworkspace

に設定したということでした。任意のOS Xのユーザーと将来の私をするために

+1

聖なる牛あなたは、潜在的に複数の時間の頭痛から私を救った。私はUbuntuにいますが、同じ問題がありました。フォルダー名、フォルダー構造、src/github.com/xyabz /で始まる前に非常に勤勉でしたが、インストールに失敗してしまいました。 – anon58192932

108

、あなたも、私はGOPATHに設定しているので、(OS X)だった私の場合はインストールしてgo get

mkdir bin 
export GOBIN=$GOPATH/bin 
+4

あなたは[GOBIN'を設定する必要はありません(https://github.com/golang/go/wiki/InstallTroubleshooting)。 ['$ GOPATH/bin'](https://golang.org/cmd/go/#hdr-GOPATH_environment_variable)に設定すると違いがある場合は、セットアップに間違ったことがあります't。 –

+0

同じエラーメッセージが表示されますが、GOPATHが設定されていてもbashでエクスポートされていないことがわかりました。 export GOPATHは問題を解決しました – Sathya

+17

@DaveC私もOS Xで同じ問題を抱えています.GOBINを設定するとそれが修正されました。 – nJoshi

2

でこの紛らわしいメッセージを回避するためにGOBINを設定する必要があります/Users/username/go

1

の代わりに/home/username/go(書籍ごとに)選択したGOPATHディレクトリ内に3つのディレクトリが必要です。

GOPATH 
    /bin 
    /src 
     /someProgram 
     program.go 
     /someLibrary 
     library.go 
    /pkg 

次に、あなたは(PKGにライブラリを置く)(ビンで実行可能ファイルを置く)someProgramまたはsomeLibraryのいずれかの内側からgo installを実行します。

6

GOPATHとGOBINの両方を設定する必要があります。次のことを行ったことを確認してください(〜/をあなたの好みのGOPAHに置き換え、その後GOBINを変更してください)。これはUbuntu 16.04 LTSでテストされています。

輸出GOPATH =〜/行く

ます。mkdir〜/行く/ binに

輸出GOBIN = $ GOPATH/binに

選択答えは私のために問題を解決していませんでした。

インストールするwnatコードが ..BaseDir...\SomeProject\src\basic\setである場合である私は、Windows上だ、と私はCMDにコマンド go help gopathを与えることによって、それを得た、との命令で太字のテキストを読んで、

+0

私は16.04で両方を定義しましたが、これは私のためには機能しませんでした。 – Catskul

1

GOPATHコードと同じ場所であってはいけません。基本プロジェクトディレクトリ:..BaseDir...\SomeProjectでなければなりません。

GOPATH環境変数には、Goコードを検索する場所がリストされています。 On Unixでは、値はコロンで区切られた文字列です。 Windowsでは、値は で、セミコロンで区切られた文字列です。 Plan 9では、値がリストになります。

環境変数が設定されていない場合、ユーザのホームディレクトリに「行く」という名前 サブディレクトリにGOPATHのデフォルト( Unix上で行く/ $のHOMEを、%USERPROFILE%\ Windows上で行く)、そのディレクトリに移動を保持しない限り、 ディストリビューション現在のGOPATHを表示するには、 "go env GOPATH"を実行します。

カスタムGOPATHを設定するには、https://golang.org/wiki/SettingGOPATHを参照してください。

GOPATHに記載されている各ディレクトリには、所定の構造を持っている必要があります。

srcディレクトリには、ソースコードを保持しています。 srcの下のパスは、 のインポートパスまたは実行可能ファイル名を決定します。

pkgディレクトリには、インストールされたパッケージオブジェクトが格納されています。 Goツリーの場合のように、 それぞれのターゲットオペレーティングシステムとアーキテクチャのペアには、独自の サブディレクトリ(pkg/GOOS_GOARCH)があります。DIRはGOPATHに記載されているディレクトリ、 DIRでソースとパッケージがある場合は

/SRC /バーは「FOO /バー」としてインポートすることができ、そのコンパイルされた形式 がインストールされている/ fooへの「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はベースプロジェクトDIRに設定しても、この問題を持って、窓にされている場合

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) 

..........

GOBINBase Project DIR\binまたは%GOPATH%\binと設定することができます。

関連する問題