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)
……….