我正在尝试为main.go文件安装自定义程序包。但是,当我跑了
go install custom.go
我收到了这个错误
go install: no install location for .go files listed on command line (GOBIN not set)
如何设置GOBIN?
答案 0 :(得分:58)
我设置了GOBIN路径,这对我有用
export GOBIN=[WorkspacePath]/bin
答案 1 :(得分:36)
检查您的GOPATH
变量
确保:
- 您的来源位于
下GOPATH/src
- 您的GOPATH文件夹中有一个
bin
文件夹。
请参阅GOPATH environment variable(其中'DIR'是GOPATH
文件夹):
bin
目录保存已编译的命令 每个命令都以其源目录命名,但仅以最终元素命名,而不是整个路径。也就是说,DIR/src/foo/quux
中包含源的命令已安装到DIR/bin/quux
,而不是DIR/bin/foo/quux
。剥离“foo/
”前缀,以便您可以DIR/bin
添加PATH
以获取已安装的命令。如果设置了
GOBIN
环境变量,则命令将安装到其命名的目录而不是DIR/bin
。GOBIN
必须是绝对的道路。
例如,this thread说明了在GOPATH/src
之外完成go构建的情况:
您的
GOPATH
似乎设置为~/go
,但您在go install
上运行了~/dev/go
命令
请参阅Go Build
Go路径是包含Go源代码的目录树列表。请参阅解决标准Go树中无法找到的导入。
如果您已完成go build
,您还可以尝试go install
(无custom.go
):您要安装软件包,而不是单个文件。
答案 2 :(得分:32)
作为初学者,当我尝试各种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结尾的文件名)和go install 仅接受包。包由其导入路径或文件系统路径命名。因此:
nate:~/work/src/dir $ go install dir/hello
nate:~/work/src/dir $ go install ./hello/
nate:~/work/src/dir/hello $ go install .
一切都很棒。第一个是通过导入路径引用包,(假设$ GOPATH =“/ home / nate / work”,go工具在/ home / nate / work / src中查找源代码),其他被解释为文件系统由于领先时期的路径。
另请参阅GOPATH docs。
答案 3 :(得分:11)
实际上有两种不同的行为。
go install <package>
记录在Compile and install packages and dependencies中 如果你正确设置GOPATH,你就不需要GOBIN了。
go install <gofile>
这没有记录,你需要在这种模式下使用GOBIN env变量。
答案 4 :(得分:7)
在使用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
答案 5 :(得分:5)
正如前面的答案所指出的,如果您的GOPATH环境正确设置到您的工作区,您就不需要设置GOBIN env变量。
请运行$ go env |来检查你的环境变量grep -i&#34; ^ GO&#34;并留意GOROOT和GOPATH检查GOROOT是否指向您的GO源安装和GOPATH指向您的工作区。
如果一切正确,那么导航到yourpkg.go所在的子目录,然后先运行$ go build(不带文件名),然后按$ go install(再次使用我的文件名),如果你没有看到任何错误屏幕上的消息,您的包已准备好在您的工作区/ pkg / youros /../ yourpackage.a
答案 6 :(得分:3)
对于*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
P.S:请勿忘记发送~/.bash_profile
或~/.zshrc
,如下所示:
$ source ~/.bash_profile
答案 7 :(得分:1)
对于 WINDOWS 用户
打开命令提示符(Win
+ r
然后键入cmd
)或Powershell窗口(Win
+ x
然后键入i
)。
设置GOPATH
注意::
GOPATH
不得与Go安装路径相同。
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
答案 8 :(得分:1)
在Windows中:
go env -w GOBIN=C:\Users\yourname\go\bin
使用go env
命令确认已设置GOBIN,然后go install
命令将可执行文件正确地保存在bin目录中。
答案 9 :(得分:1)
我也遇到了同样的麻烦(GOBIN不需要单独设置),请确保您具有以下条件
go install <your_module>
答案 10 :(得分:0)
关于设置GOBIN
变量版本不需要它而只依赖GOPATH
:
GOBIN
,即该文件直接位于GOPATH
目录中。当我们尝试将Go功能作为学习者
对于典型的Go项目,文件位于包目录下。对于这些,GOPATH
已经足够了。
换句话说,以下两种解决方案都可行:
一个。将GOBIN
明确设置为$ GOPATH / bin [仅用于学习目的,可以避免]
湾创建一个子目录,该子目录将是您的包名称并将.go文件移动到它
我猜Go实用程序应该删除上述错误并更好地处理方案 - 基于参数是目录还是源文件
答案 11 :(得分:0)
如果您已正确设置 $ GOPATH ,则不需要 $ GOBIN 。如果是这样,只需重新检查您的项目是否位于 $ GOPATH / src 文件夹中。
答案 12 :(得分:0)
来自https://golang.org/cmd/go/#hdr-Environment_variables:
GOBIN'go install'将在其中安装命令的目录。
和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)和已安装的命令(在GOPATH / bin中,除非GOBIN为 设置)。
因此,看来基本上您可以使用GOBIN临时或永久覆盖默认的二进制安装位置(即$GOPATH/bin
)。我成功使用env GOBIN=$HOME/bin/ go install testfile.go
安装了1个文件的go“脚本”。这是使用go v1.11完成的。
答案 13 :(得分:0)
尝试
export GOROOT=""
export PATH=$PATH:$GOROOT/bin