一尘不染

Go 安装失败并显示错误:GOPATH 之外的目录 xxx 没有安装位置

go

~/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

无论项目采用何种结构,这总是以相同的消息失败。Go 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 是用自制软件安装的。


阅读 150

收藏
2021-11-07

共2个答案

一尘不染

当您不向 提供参数时go install,它默认尝试在当前目录中安装包。错误消息告诉您它不能这样做,因为当前目录不是您的$GOPATH.

您可以:

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

在任一之后,进入go-statsd-client目录并键入go install将起作用,因此可以go install go-statsd-client从文件系统中的任何位置键入。构建的二进制文件将进入$GOPATH/bin.

作为一个不相关的建议,您可能希望使用域名来命名您的包,以避免名称冲突(例如github.com/you/go-statsd-client,如果这是您保存源代码的地方)。

2021-11-07
一尘不染

对于任何 OS X 用户和未来的我,您还需要设置GOBIN以避免在安装和go get

mkdir bin 
export GOBIN=$GOPATH/bin
2021-11-07