Go安装总是失败没有GOPATH之外的安装目录

~/src/go-statsd-client> echo $GOPATH /Users/me/gopath ~/src/go-statsd-client> echo $GOROOT /usr/local/Cellar/go/1.1.1\ ~/src/go-statsd-client> go install go install: no install location for directory /Users/me/src/go-statsd-client outside GOPATH 

无论项目是什么结构,总是会失败,并带有相同的信息。 去build设完美的作品。

这是我go env

 GOARCH="amd64" GOBIN="" GOCHAR="6" GOEXE="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOOS="darwin" GOPATH="/Users/me/gopath" GORACE="" GOROOT="/usr/local/Cellar/go/1.1.1" GOTOOLDIR="/usr/local/Cellar/go/1.1.1/pkg/tool/darwin_amd64" CC="gcc" GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common" CGO_ENABLED="1" 

这是在Mac OSX Mountain Lion上,并安装了自制软件。

当你没有提供参数go install ,它默认尝试在当前目录中安装软件包。 错误消息告诉你,它不能这样做,因为当前目录不是你的$GOPATH一部分。

你可以:

  • 定义$GOPATH到你的$ HOME( export GOPATH=$HOME )。
  • 将源代码移动到当前的$GOPATH$GOPATH mv ~/src/go-statsd-client /User/me/gopath )中。

之后,进入go-statsd-client目录并inputgo install将会起作用,所以在文件系统的任何地方都可以inputgo install go-statsd-client 。 构build的二进制文件将进入$GOPATH/bin

作为一个不相干的build议,你可能想用域名来命名你的包,以避免名称冲突(例如github.com/you/go-statsd-client ,如果这是你持有源代码的地方)。

对于任何OS X用户和未来的我,您还需要设置GOBIN以避免在安装时出现这个令人困惑的消息,并go get

 mkdir bin export GOBIN=$GOPATH/bin 

您正在使用Go安装在GOPATH文件夹之外的目录中。 设置你的GOBIN envvariables,或者在GOPATH中移动src文件夹。

 GOPATH/ bin/ src/ go-statsd-client/ 

更多信息: GO BUILD源代码 ,第296行

您需要设置GOPATH和GOBIN。 确保你已经完成了下面的工作(请把你的首选GOPAH换成〜/去,然后改变GOBIN)。 这在Ubuntu 16.04 LTS上进行了testing。

导出GOPATH =〜/去

mkdir〜/ go / bin

导出GOBIN = $ GOPATH / bin

所选的答案并没有解决我的问题。

我在Windows上遇到了这个问题。

我的问题是,我的%GOPATH%环境variables设置为

C:\Users\john\src\goworkspace

代替

C:\Users\john\src\goworkspace\

在最后加上缺less的斜线修复了我。

在我的情况下(OS X),这是因为我已经设置GOPATH/home/username/go (根据本书)而不是/Users/username/go

你需要在你select的GOPATH目录中有3个目录。

 GOPATH /bin /src /someProgram program.go /someLibrary library.go /pkg 

然后,你会运行go install从someProgram(其中一个可执行文件在bin)或someLibrary(其中一个库在pkg)。

我在Windows上,通过给命令go help gopath到cmd,并在指令中读取粗体文本,

也就是说,如果您要安装的代码位于..BaseDir...\SomeProject\src\basic\set ,则GOPATH不应该与代码位置相同,应该只是Base Project DIR: ..BaseDir...\SomeProject

GOPATH环境variables列出了寻找Go代码的地方。 在Unix上,该值是冒号分隔的string。 在Windows上,该值是以分号分隔的string。 在计划9中,该值是一个列表。

如果环境variables未设置,GOPATH将默认为用户主目录中的“go”子目录($ HOME / go on Unix,%USERPROFILE%\ go on Windows),除非该目录包含Go分配。 运行“go env GOPATH”来查看当前的GOPATH。

请参阅https://golang.org/wiki/SettingGOPATH设置自定义GOPATH。;

GOPATH中列出的每个目录必须具有规定的结构:

src目录保存源代码。 src下面的path决定了导入path或可执行文件的名称。

pkg目录保存已安装的软件包对象。 与Go树一样,每个目标操作系统和体系结构对都有自己的pkg(pkg / GOOS_GOARCH)子目录。

如果DIR是在GOPATH中列出的目录,那么在DIR / src / foo / bar中包含源代码的包可以作为“foo / bar”导入,并将其编译forms安装到“DIR / pkg / GOOS_GOARCH / foo / bar.a ”。

bin目录保存已编译的命令。 每个命令的源目录都被命名,但只有最后一个元素,而不是整个path。 也就是说,DIR / src / foo / quux中源代码的命令安装在DIR / bin / quux中,而不是DIR / bin / foo / quux中。 “foo /”前缀被剥离,以便您可以将DIR / bin添加到PATH以获取已安装的命令。 如果设置了GOBIN环境variables,命令将安装到它所指定的目录而不是DIR / bin。 戈宾必须是绝对path。

这是一个目录布局的例子:

 GOPATH=/home/user/go /home/user/go/ src/ foo/ bar/ (go code in package bar) x.go quux/ (go code in package main) y.go bin/ quux (installed command) pkg/ linux_amd64/ foo/ bar.a (installed package object) 

……….