GOBIN未设置:无法运行去安装

时间:2014-08-09 08:40:50

标签: go

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

go install custom.go

我收到了这个错误

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

如何设置GOBIN?

14 个答案:

答案 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/binGOBIN必须是绝对的道路。


例如,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不需要单独设置),请确保您具有以下条件

  1. 已设置GOPATH(这也会自动将GOBIN设置为$ GOPATH / bin)
  2. GOPATH具有以下目录bin,pkg,src
  3. custom.go放在src /
  4. 然后运行go install <your_module>
  5. 您可以在bin文件夹下找到已编译二进制文件()的支票

答案 10 :(得分:0)

关于设置GOBIN变量版本不需要它而只依赖GOPATH

    如果我们没有包,则需要
  1. GOBIN,即该文件直接位于GOPATH目录中。当我们尝试将Go功能作为学习者

  2. 时,可能会出现这种情况
  3. 对于典型的Go项目,文件位于包目录下。对于这些,GOPATH已经足够了。

  4. 换句话说,以下两种解决方案都可行:  一个。将GOBIN明确设置为$ GOPATH / bin [仅用于学习目的,可以避免]  湾创建一个子目录,该子目录将是您的包名称并将.go文件移动到它

  5. 我猜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