164
~/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 是用 homebrew 安装的。

4

12 回答 12

210

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

mkdir bin 
export GOBIN=$GOPATH/bin
于 2015-09-02T15:18:12.237 回答
119

当您不提供任何参数时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,如果这是您保存源代码的地方)。

于 2013-08-10T17:03:14.467 回答
30

您在 GOPATH 文件夹之外的目录上使用go install 。设置您的 GOBIN 环境变量,或将src文件夹移动到 GOPATH 中。

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

更多信息:构建源代码,第 296 行

于 2013-08-09T16:15:43.180 回答
26

您需要同时设置GOPATHGOBIN。确保您已完成以下操作(请替换~/go为您的首选GOPATH并随后更改GOBIN)。这是在Ubuntu 16.04 LTS.

export GOPATH=~/go 

mkdir ~/go/bin

export GOBIN=$GOPATH/bin

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

于 2017-05-12T07:43:03.730 回答
7

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

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

然后,您将从go installsomeProgram(将可执行文件放入 bin)或 someLibrary(将库放入 pkg)内部运行。

于 2017-03-18T08:39:13.173 回答
3

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

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

C:\Users\john\src\goworkspace

代替

C:\Users\john\src\goworkspace\

在末尾添加缺少的斜杠为我修复了它。

于 2015-06-13T02:05:55.793 回答
3

值得一提的是,这是我的 .bash_profile,在使用 Homebrew 安装 go 之后,它在带有 Atom 的 mac 上非常适合我:

export GOROOT=`go env GOROOT`
export GOPATH=/Users/yy/Projects/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
于 2018-04-01T05:50:14.660 回答
2

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

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

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

如果未设置环境变量,则 GOPATH 默认为用户主目录中名为“go”的子目录(Unix 上为 $HOME/go,Windows 上为 %USERPROFILE%\go),除非该目录包含 Go 发行版。运行“go env 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 目录保存已编译的命令。每个命令都以其源目录命名,但只是最后一个元素,而不是整个路径。也就是说,source 位于 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

于 2017-10-09T04:22:54.437 回答
2

就我而言(OS X),这是因为我已经设置GOPATH/home/username/go(根据书)而不是/Users/username/go

于 2017-02-20T13:11:32.967 回答
1

跑步时要小心

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> 
于 2019-06-03T11:10:14.770 回答
0

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

于 2018-03-15T00:36:46.257 回答
-1

在 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

于 2019-02-25T23:17:02.147 回答