main.goファイルのカスタムパッケージをインストールしようとしています。しかし、私が走ったとき
go install custom.go
このエラーが発生しました
go install: no install location for .go files listed on command line (GOBIN not set)
GOBINを設定するにはどうすればよいですか?
main.goファイルのカスタムパッケージをインストールしようとしています。しかし、私が走ったとき
go install custom.go
このエラーが発生しました
go install: no install location for .go files listed on command line (GOBIN not set)
GOBINを設定するにはどうすればよいですか?
回答:
2020年の更新:Go 1.11およびGoモジュールの導入以降、GOPATH
プロジェクトごとに不要になり、デフォルト~/go
でグローバルツール/プロジェクトになりgo get
ます。
Go 1.16(2020年第1四半期)はデフォルトGOBIN
で GOPATH[0]/bin
。
ただし、今のところ、モジュールを使用するプロジェクトでは、「go install: no install location ...
」のようなエラーメッセージは表示されなくなります。
2014年の元の回答:
GOPATH
変数を確認してください。
確認してください:
- あなたの情報源は下にあります
GOPATH/src
bin
あなたのGOPATHフォルダ内のフォルダを。GOPATH環境変数(「DIR」はGOPATH
フォルダー)を参照してください。
bin
ディレクトリには、コンパイルされたコマンドを保持しています。
各コマンドはそのソースディレクトリにちなんで名付けられていますが、パス全体ではなく、最後の要素のみに名前が付けられています。つまり、ソースが入っているコマンドは、ではなくにDIR/src/foo/quux
インストールされます。「あなたが追加できるように、」接頭辞が取り除かれ、あなたにインストールされたコマンドで取得します。DIR/bin/quux
DIR/bin/foo/quux
foo/
DIR/bin
PATH
GOBIN
環境変数が設定されている場合、コマンドは、の代わりに名前が付けられたディレクトリにインストールされますDIR/bin
。GOBIN
絶対パスである必要があります。
たとえば、このスレッドは、goビルドが次の外部で実行された場合に何が起こるかを示していますGOPATH/src
。
に
GOPATH
設定されているよう~/go
ですが、go install
コマンドを実行しました~/dev/go
参照ゴービルド
Goパスは、Goソースコードを含むディレクトリツリーのリストです。標準のGoツリーにないインポートを解決するために参照されます。
完了している場合はgo build
、go install
(no custom.go
)を試すこともできます。単一のファイルではなく、パッケージをインストールします。
GOBINパスを設定しましたが、それでうまくいきました
export GOBIN=[WorkspacePath]/bin
cannot install, GOBIN must be an absolute path
:(
..
か~
、または指定したパスで使用しましたか?そのエラーが発生し、/home/ben/bin/
またはなどの絶対パスに切り替えました$HOME/bin/
。私の完全なコマンドは(fishshellではv1.11に移動)env GOBIN=$HOME/bin/ go install testfile.go
でした。
初心者として、さまざまなgoコマンド(ビルド、実行、インストール)を試しているときに、このエラーに遭遇しました。要するに、あなたがすることはできませんインストール行くfilename.goを。パッケージのみをインストールできます。
私はそれを学んだので、これは混乱しました:
nate:~/work/src/dir $ go run hello/hello.go
hello, world.
よく働く。しかし、インストールが機能しない理由を理解できませんでした。
nate:~/work/src/dir $ go install hello/hello.go
go install: no install location for .go files listed on command line (GOBIN not set)
nate:~/work/src/dir $ go install hello
can't load package: package hello: cannot find package "hello" in any of:
/opt/go/src/hello (from $GOROOT)
/home/ubuntu/work/src/hello (from $GOPATH)
私がどのディレクトリにいたかに関係なく:
nate:~/work/src/dir $ cd hello
nate:~/work/src/dir/hello $ go install hello.go
go install: no install location for .go files listed on command line (GOBIN not set)
nate:~/work/src/dir/hello $ go install hello
can't load package: package hello: cannot find package "hello" in any of:
/opt/go/src/hello (from $GOROOT)
/home/ubuntu/work/src/hello (from $GOPATH)
この混乱は、go run はGoソースファイル(.goで終わるファイル名)でのみ機能し、goinstallはパッケージのみを受け入れるため です。パッケージには、インポートパスまたはファイルシステムパスによって名前が付けられます。したがって:
nate:~/work/src/dir $ go install dir/hello
nate:~/work/src/dir $ go install ./hello/
nate:~/work/src/dir/hello $ go install .
すべてうまくいきます。1つ目はインポートパスでパッケージを参照し($ GOPATH = "/ home / nate / work"の場合、goツールは/ home / nate / work / srcでソースコードを検索します)、その他はファイルシステムとして解釈されます。先行期間のためのパス。
GOPATHのドキュメントも参照してください。
go install
ディレクトリで機能し、特定のgoファイルを指定すると、この特定の問題が発生する可能性があります。
実際には、2種類の動作があります。
go install <package>
これは、パッケージと依存関係のコンパイルとインストールに記載され ています。GOPATHを正しく設定すれば、GOBINは必要ありません。
go install <gofile>
これは文書化されておらず、このモードではGOBIN環境変数が必要です。
go install <gofile>
が文書化さgo help packages
れており、でgo install --help
参照されています。問題は、go install
(1.9.2以前では)動作に一貫性がないことです。ある場合にはそれが必要であり、別の場合にはGOBINを明示的に設定する必要がありません。
以前の回答で指摘されているように、GOPATH envがワークスペースに正しく設定されている場合は、GOBINenv変数を設定する必要はありません。
$ go env |を実行して、go環境変数を確認してください。grep -i "^ GO"を実行し、GOROOTとGOPATHを探して、GOROOTがGOソースインストールを指しているかどうか、GOPATHがワークスペースを指しているかどうかを確認します。
すべてが正しい場合は、yourpkg.goが存在するサブディレクトリに移動し、最初に$ go build(ファイル名なし)を実行し、次に$ go install(ファイル名付き)を実行します。画面にエラーメッセージが表示されない場合は、パッケージはworkspace / pkg / youros /../yourpackage.aで準備ができています
cygwinを使用するWindowsでは、GOBINを$ GOPATH / binに設定することをお勧めします。
そして、Windowsのファイル名セパレータを適切にエスケープすることを忘れないでください。
$ echo $GOROOT
C:\Go\
carl@rainier ~/gocode/src/github.com/user/hello
$ echo $GOPATH
C:\cygwin64\home\carl\gocode
carl@rainier ~/gocode/src/github.com/user/hello
$ echo $GOBIN
C:\cygwin64\home\carl\gocode\bin
以下のため*nix
のシステム、どこを見れgo
次のコマンドを実行し、インストールされています:
$ which go
どの出力を言いましょう:
/usr/local/go/bin/go
次に、次のエントリを~/.bash_profile
またはに追加します~/.zshrc
。
export GOROOT=/usr/local/go
export GOPATH=$GOROOT/src //your-go-workspace
export GOBIN=$GOROOT/bin //where go-generate-executable-binaries
PATH=$PATH:$GOPATH:$GOBIN
export PATH
PS:次のように、~/.bash_profile
またはを調達することを忘れないでください~/.zshrc
:
$ source ~/.bash_profile
/usr/local/go/bin
ですか?
GOBIN
それを必要とせず、ただ頼る変数バージョンの設定に関してGOPATH
:
GOBIN
パッケージがない場合、つまりファイルがGOPATH
ディレクトリに直接ある場合は、が必要です。これは、学習者としてGo機能を試しているときに発生する可能性があります
一般的なGoプロジェクトの場合、ファイルはパッケージディレクトリの下にあります。これらについてGOPATH
は、十分です。
つまり、次の両方のソリューションが機能します。GOBIN
$ GOPATH / binとして明示的に設定します[学習目的でのみ、回避できます] b。パッケージ名となるサブディレクトリを作成し、.goファイルをそのサブディレクトリに移動します
引数がディレクトリであるかソースファイルであるかに基づいて、Goユーティリティは上記のエラーを削除し、シナリオをより適切に処理する必要があると思います
以下のためのWINDOWSのユーザー
コマンドプロンプト(Win
+r
次に入力cmd
)またはPowerShellウィンドウ(Win
+x
次に入力i
)を開きます。
GOPATHの設定
注: Goインストールと同じパスであって
GOPATH
はなりません。
go env -w GOPATH=c:\your-go-work
詳細については、https://github.com/golang/go/wiki/SettingGOPATH#windowsの下のリンクを ご覧ください。
GOBINの設定
go env -w GOBIN=C:\somewhere\else\bin
golangが提供するコード例を確認することをお勧めします。それは私を大いに助けました。 https://golang.org/doc/code.html#Command
私も同じ問題を抱えていました(GOBINを個別に設定する必要はありません)。次のものがあることを確認してください
go install <your_module>
https://golang.org/cmd/go/#hdr-Environment_variablesから:
GOBIN'goinstall 'がコマンドをインストールするディレクトリ。
およびhttps://golang.org/cmd/go/#hdr-GOPATH_environment_variable:
GOBIN環境変数が設定されている場合、コマンドはDIR / binではなく名前の付いたディレクトリにインストールされます。GOBINは絶対パスである必要があります。
およびhttps://golang.org/cmd/go/#hdr-Modules__module_versions__and_more
モジュール認識モードでは、GOPATHはビルド中のインポートの意味を定義しなくなりましたが、ダウンロードされた依存関係(GOPATH / pkg / mod)とインストールされたコマンド(GOBINが設定されていない限りGOPATH / bin)を保存します。
したがって、基本的には、GOBINを使用して、デフォルトのバイナリインストール場所(つまり$GOPATH/bin
)を一時的または永続的にオーバーライドできるようです。を使用して1ファイルのgo "script"をインストールすることに成功しましたenv GOBIN=$HOME/bin/ go install testfile.go
。これは、gov1.11を使用して行われました。
go install
インストールします。golang.org/cmd/goをすべて読んで、ファイルの設定方法を確認してください。