Go安装失败,错误:GOPATH外的目录xxx没有安装位置

时间:2013-08-09 14:52:32

标签: macos 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上,并且是随着自制软件安装的。

13 个答案:

答案 0 :(得分:155)

对于任何OS X用户和未来的我,您还需要设置GOBIN以避免在安装时出现此混淆消息并go get

mkdir bin 
export GOBIN=$GOPATH/bin

答案 1 :(得分:99)

如果不向go install提供参数,则默认尝试在当前目录中安装软件包。错误消息告诉您它无法执行此操作,因为当前目录不属于您的$GOPATH

你可以:

  • $GOPATH定义到$ HOME(export GOPATH=$HOME)。
  • 将您的来源移至当前$GOPATHmv ~/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,如果您持有源代码的话)。

答案 2 :(得分:25)

您正在GOPATH文件夹之外的目录中使用 go install 。 设置GOBIN env变量,或在GOPATH中移动 src 文件夹。

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

更多信息:GO BUILD Source code,第296行

答案 3 :(得分:5)

您希望在所选的GOPATH目录中有3个目录。

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

然后你将从someProgram(将可执行文件放入bin)或someLibrary(将库放入pkg)中运行go install

答案 4 :(得分:3)

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

我的问题是我的%GOPATH%环境变量设置为

C:\Users\john\src\goworkspace

而不是

C:\Users\john\src\goworkspace\

在最后添加缺失的尾部斜线为我修复了它。

答案 5 :(得分:2)

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

答案 6 :(得分:2)

对于它的价值,这里是我的.bash_profile,在安装了Homebrew之后,在使用Atom的Mac上运行良好:

export GOROOT=`go env GOROOT`
export GOPATH=/Users/yy/Projects/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN

答案 7 :(得分:1)

我在Windows上,我通过向cmd发出命令go help gopath来获取它,并阅读说明中的粗体文本,

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

  

GOPATH环境变量列出了要查找Go代码的位置。上   Unix,值是冒号分隔的字符串。在Windows上,值为   以分号分隔的字符串。在计划9中,值是一个列表。

     

如果未设置环境变量,则GOPATH默认为a   子目录名为" go"在用户的主目录中($ HOME /继续   Unix,%USERPROFILE%\ go在Windows上),除非该目录包含Go   分配。跑"去环境GOPATH"看看当前的GOPATH。

     

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

     

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

     

src目录包含源代码。 src下面的路径决定了   导入路径或可执行文件名称。

     

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

     

如果DIR是GOPATH中列出的目录,则包含源代码的包   DIR / src / foo / bar可以导入为" foo / bar"并有其编译形式   安装到" DIR / pkg / GOOS_GOARCH / foo / bar.a"。

     

bin目录保存已编译的命令。每个命令都以。命名   它的源目录,但只有最终元素,而不是整个路径。   也就是说,安装了DIR / src / foo / quux中包含源的命令   DIR / bin / quux,而不是DIR / bin / foo / quux。 " foo /"前缀被剥离了   您可以将DIR / bin添加到PATH以获取已安装的内容   命令。如果设置了GOBIN环境变量,则命令为   安装到它命名的目录而不是DIR / bin。 GOBIN一定是   一条绝对的道路。

     

这是一个示例目录布局:

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)
     

..........

如果GOPATH已设置为Base Project DIR且仍然存在此问题,则在Windows中您可以尝试将 GOBIN 设置为Base Project DIR\bin%GOPATH%\bin

答案 8 :(得分:0)

在Windows中,当我设置GOPATH环境变量时,我的cmd窗口已经打开。 首先,我必须关闭cmd,然后重新打开才能生效。

答案 9 :(得分:0)

在OSX Mojave 10.14上,go通常安装在/usr/local/go上。

因此,设置这些ENV,您应该就可以了。

export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin

还可以将它们添加到您的bash_profilezsh_profile中。

echo "export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin" >> ~/.bash_profile && source ~/.bash_profile

答案 10 :(得分:0)

在此线程和其他地方定义了几种修复方法,但是大多数人都错过了不仅仅是解决当前问题的方法,我们还在尝试解决项目设计中是否出错的问题。来自项目创建者的意图或期望。

首先,您需要修复$ GOPATH变量。 Soln:将其设置为您的项目基本路径。 其次,您需要定义项目的入口点。通常使用“ main”定义。

这是项目执行理解程序的基本工作目录和工作点的方式。

答案 11 :(得分:0)

跑步时要小心

export GOPATH=$HOME

假设您的代码存在于与GOPATH相关的特定位置。因此,您可以使用docker运行任何go命令:

docker run -it -v $(pwd):/go/src/github.com/<organization name>/<repository name> golang

现在您可以使用任何golang命令,例如:

go test github.com/<organization name>/<repository name> 

答案 12 :(得分:0)

问题是您不在具有带有go main功能的go文件的软件包目录中,并且go install找不到要安装的命令(带有go main功能的go文件)。

$ cd /path/to/file-with-main-function.go

然后运行:

$ go install