GOBIN没有设置:无法运行去安装
我正在尝试为我的main.go文件安装我的自定义软件包。 但是,当我跑了
go install custom.go
我得到这个错误
go install: no install location for .go files listed on command line (GOBIN not set)
我如何设置GOBIN?
检查你的GOPATH
variables。
确保:
- 你的源代码在
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/bin
。GOBIN
必须是绝对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文件夹中即可。
关于设置不需要它的GOBIN
variables版本,只依靠GOPATH
:
-
如果我们没有包,
GOBIN
是必需的,即文件直接在GOPATH
目录中。 这可能是我们正在尝试Gofunction的学习者 -
对于典型的Go项目,文件位于软件包目录下。 对于这些,
GOPATH
就够了。 -
换句话说,下面的解决scheme都可以工作:a。 显式设置
GOBIN
为$ GOPATH / bin [仅用于学习目的,可以避免] b。 创build一个子目录,这将是您的包名称,并将.go文件移动到它 -
我猜Go实用程序应该删除上面的错误并更好地处理这个场景 – 根据参数是一个目录还是一个源文件