GOBIN没有设置:无法运行去安装

我正在尝试为我的main.go文件安装我的自定义软件包。 但是,当我跑了

go install custom.go 

我得到这个错误

 go install: no install location for .go files listed on command line (GOBIN not set) 

我如何设置GOBIN?

检查你的GOPATHvariables。
确保:

  • 你的源代码在GOPATH/src
  • 您的GOPATH文件夹中有一个bin文件夹。

请参阅GOPATH环境variables (其中“DIR”是GOPATH文件夹):

bin目录保存已编译的命令。
每个命令的源目录都被命名,但只有最后一个元素,而不是整个path。 也就是说, DIR/src/foo/quux源代码的命令安装在DIR/bin/quux ,而不是DIR/bin/foo/quux 。 “ foo/ ”前缀被剥离,以便您可以将DIR/bin添加到PATH以获取已安装的命令。

如果设置了GOBIN环境variables,命令将安装到它所指定的目录而不是DIR/binGOBIN必须是绝对path。


例如, 这个线程说明了在GOPATH/src之外进行构build的情况下会发生什么情况:

看起来你的GOPATH被设置为~/go但是你在~/dev/go上运行了go install命令

请参阅去build设

Gopath是包含Go源代码的目录树列表。 它被用来解决在标准的Go树中找不到的import。

如果你已经完成go build ,你也可以尝试go install (没有custom.go ):你想安装包,而不是一个文件。

我设置了GOBINpath,并为我工作

 export GOBIN=[WorkspacePath]/bin 

作为初学者,当我尝试各种go命令(构build,运行和安装)时遇到了这个错误。 总之,你不能去安装一个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) 

不pipe我在哪个目录:

 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结尾的文件名)并且安装 接受包。 包通过其导入path或文件系统path命名。 从而:

 nate:~/work/src/dir $ go install dir/hello nate:~/work/src/dir $ go install ./hello/ nate:~/work/src/dir/hello $ go install . 

一切都很好。 第一种是通过导入path引用包(假设$ GOPATH =“/ home / nate / work”,go工具在/ home / nate / work / src中查找源代码),其他文件被解释为文件系统由于领先时期的path。

另请参阅GOPATH文档 。

在用cygwin的窗口上,将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 

其实有两种不同的行为。

 go install <package> 

这在编译和安装软件包和依赖关系中有logging如果您正确设置了GOPATH,则不需要GOBIN。

 go install <gofile> 

这是没有logging,你需要GOBIN envvariables在这种模式下。

正如前面的答案指出的那样,如果你的GOPATH env被正确设置到你的工作区,你不需要设置GOBIN envvariables。

请运行$ go env |来检查你的环境variables grep -i“^ GO”,注意GOROOT和GOPATH来检查GOROOT是否指向你的GO源代码安装和GOPATH指向你的工作区。

如果一切正常,则导航到yourpkg.go所在的子目录,然后运行$ go build(不带文件名),然后$ go install(再次带有文件名)第二,如果在屏幕上没有看到任何错误消息,包已准备好在您的工作区/ pkg / youros /../ yourpackage.a

对于*nix系统,请查看安装位置,执行以下命令:

 $ 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 

如果您正确设置了$ GOPATH,则不需要$ GOBIN 。 如果是这样,只要重新检查项目是否位于$ GOPATH / src文件夹中即可。

关于设置不需要它的GOBINvariables版本,只依靠GOPATH

  1. 如果我们没有包, GOBIN是必需的,即文件直接在GOPATH目录中。 这可能是我们正在尝试Gofunction的学习者

  2. 对于典型的Go项目,文件位于软件包目录下。 对于这些, GOPATH就够了。

  3. 换句话说,下面的解决scheme都可以工作:a。 显式设置GOBIN为$ GOPATH / bin [仅用于学习目的,可以避免] b。 创build一个子目录,这将是您的包名称,并将.go文件移动到它

  4. 我猜Go实用程序应该删除上面的错误并更好地处理这个场景 – 根据参数是一个目录还是一个源文件