无法下载,$GOPATH 未设置

我想使用 go get github.com/jehiah/json2csv安装 json2csv,但是我收到了这个错误:

package github.com/jehiah/json2csv: cannot download, $GOPATH not set. For more details see: go help go path

有什么关于如何在 MacOS 上解决这个问题的帮助吗?

163687 次浏览

[更新: 在 Go 1.8中,GOPATH默认为 $HOME/go,但是如果你想了解 GOPATH的布局,定制它,等等,你可能仍然会发现这很有用。]

官方 Go 站点 讨论 GOPATH 以及如何布局工作区目录

export GOPATH="$HOME/your-workspace-dir/"——在 shell 中运行它,然后将它添加到 ~/.bashrc或等价物中,以便将来为您设置它。Go 将在 src/bin/pkg/的子目录下安装软件包。如果您想要发布到 GitHub,那么您需要将自己的软件包放在 $GOPATH/src之下的某个位置,比如 $GOPATH/src/github.com/myusername/。您还可能希望在 .bashrc中使用 export PATH=$PATH:$GOPATH/bin,以便在 $GOPATH下运行已编译的程序。

也可以选择 通过 Rob Pike,您还可以设置 CDPATH,这样对于在 bash 中打包 dir 的 cd来说更快: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/x意味着您可以只键入 cd net/html而不是 cd $GOPATH/src/golang.org/x/net/html

你可以设置 GOPATH=$HOME将 Go 的 src/pkg/bin/目录放在你的主目录下。这可能很好(例如,您的路径中可能已经有了 $HOME/bin) ,但是当然有些人会使用多个工作区,等等。

只要做 export GOPATH="/whatever/you/like/your/GOPATH/to/be"

观看视频

总的来说,我总是推荐这个来自 Go 的官方视频来快速了解这个问题:

Http://www.youtube.com/watch?v=xcsl89ytqcs

被展示比被告知更容易。

@ jwfearn 转述了视频中的重要部分:

export GOPATH="${HOME}/gocode"; export PATH="${PATH}:${GOPATH}/bin"; mkdir -p "${GOPATH}"

如果在设置了 $GOPATH之后遇到这个问题,可能是因为使用的是不受支持的 shell。我使用的是 fish,它没有工作,启动它与 bash工作良好。

这次成功了

在 Ubuntu 上设置 Go 开发环境,以及如何修复 $GOPATH/$GOROOT

步骤

mkdir ~/go

设置 $GOPATH in. bashrc,

export GOPATH=~/go
export PATH=$PATH:$GOPATH/bin

我必须以 root 用户身份运行一个应用程序(以便在端口80上打开一个 webserver) ,这给我带来了错误,因为 sudo 用户的环境与普通用户不同,因此没有设置 GOPATH。

如果其他人有这个问题,将 -E添加到命令中,这将保留用户环境。

sudo -E go run main.go

有关详细信息,请参阅这里的讨论: 谷歌群组-GOPATH 问题

用啤酒

我用 brew安装的。

$ brew install go

当它完成后,如果你运行这个酿造命令,它会显示以下信息:

$ brew info go
go: stable 1.4.2 (bottled), HEAD
Go programming environment
https://golang.org
/usr/local/Cellar/go/1.4.2 (4676 files, 158M) *
Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/go.rb
==> Options
--with-cc-all
Build with cross-compilers and runtime support for all supported platforms
--with-cc-common
Build with cross-compilers and runtime support for darwin, linux and windows
--without-cgo
Build without cgo
--without-godoc
godoc will not be installed for you
--without-vet
vet will not be installed for you
--HEAD
Install HEAD version
==> Caveats
As of go 1.2, a valid GOPATH is required to use the `go get` command:
https://golang.org/doc/code.html#GOPATH


You may wish to add the GOROOT-based install location to your PATH:
export PATH=$PATH:/usr/local/opt/go/libexec/bin

其中最重要的是这些句子:

/usr/local/Cellar/go/1.4.2(4676个文件,158M) *

Export PATH = $PATH:/usr/local/opt/go/libexec/bin

设置 GO 的环境

这显示了 GO 的安装位置:

$ export PATH=$PATH:/usr/local/opt/go/libexec/bin
$ export GOPATH=/usr/local/opt/go/bin

然后,您可以使用 GO 检查它是否配置正确:

$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/usr/local/opt/go/bin"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.4.2/libexec"
GOTOOLDIR="/usr/local/Cellar/go/1.4.2/libexec/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"

设置 json2csv

看起来不错,那么让我们安装 json2csv:

$ go get github.com/jehiah/json2csv
$

刚刚发生了什么? 它安装了它。你可以这样检查:

$ $ ls -l $GOPATH/bin
total 5248
-rwxr-xr-x  1 sammingolelli  staff  2686320 Jun  9 12:28 json2csv

好的,那么为什么我不能在 shell 中输入 json2csv呢?这是因为 $GOPATH下的 /bin目录不在您的 $PATH上。

$ type -f json2csv
-bash: type: json2csv: not found

所以让我们暂时加上它:

$ export PATH=$GOPATH/bin:$PATH

再检查一遍:

$ type -f json2csv
json2csv is hashed (/usr/local/opt/go/bin/bin/json2csv)

现在它就在那里:

$ json2csv --help
Usage of json2csv:
-d=",": delimiter used for output values
-i="": /path/to/input.json (optional; default is stdin)
-k=[]: fields to output
-o="": /path/to/output.json (optional; default is stdout)
-p=false: prints header to output
-v=false: verbose output (to stderr)
-version=false: print version string

将我们对 $PATH$GOPATH所做的修改添加到您的 $HOME/.bash_profile,使它们在重新启动之间保持不变。

对 MAC 来说,这对我很管用。

sudo nano /etc/bashrc

并在文件末尾添加以下内容

export PATH=$PATH:/usr/local/opt/go/libexec/bin
export GOPATH=/usr/local/opt/go/bin

这应该可以解决这个问题。尝试打开一个新的终端并回显 $GOPATH,您应该会看到正确的值。

(MAC)

我尝试了所有这些答案,但由于某些仍然未知的原因,没有一个奏效。

我必须通过设置每个需要它的命令的环境变量来“强制提供”GOPATH,例如:

sudo env GOPATH=$HOME/goWorkDirectory go build ...

甚至 glide也给了我 GOPATH not set的错误,再次通过“强制喂食”解决了这个问题: 我尝试了所有这些答案,但由于某些仍然未知的原因,没有一个奏效。

我不得不通过设置每个需要它的命令的环境变量来“强制提供”GOPATH。

sudo env GOPATH=$HOME/goWorkDirectory glide install

希望这对谁有帮助。

我发现这样做更容易:

export GOROOT=$HOME/go
export GOPATH=$GOROOT/bin
export PATH=$PATH:$GOPATH

您的 $GOROOT不应该被设置。 您的 $GOPATH应该通过键入 export $GOPATH=$HOME/go设置为 $HOME/go

请键入 export GOROOT=""来修复您的问题。

您可以像其他人建议的那样使用“导出”解决方案。我想为您提供另一个永久方便的解决方案: 您可以在运行 Go 命令时使用任何路径作为 GOPATH。

首先,您需要下载一个名为 gost: https://github.com/byte16/gost/releases的小工具。如果你使用 ubuntu,你可以下载 linux 版本(https://github.com/byte16/gost/releases/download/v0.1.0/gost_linux_amd64.tar.gz)。

然后,您需要运行下面的命令来解压它:

$ cd /path/to/your/download/directory
$ tar -xvf gost_linux_amd64.tar.gz

你会得到一个可执行的 gost。你可以把它移动到 /usr/local/bin以方便使用:

$ sudo mv gost /usr/local/bin

运行下面的命令,将要用作 GOPATH 的路径添加到 路径空间gost维护中。需要为路径指定一个稍后将使用的名称。

$ gost add foo /home/foobar/bar     # 'foo' is the name and '/home/foobar/bar' is the path

以下面的格式运行任意 Go 命令:

gost goCommand [-p {pathName}] -- [goFlags...] [goArgs...]

例如,你想用 /home/foobar/bar作为 GOPATH 运行 go get github.com/go-sql-driver/mysql,只需按照下面的步骤:

$ gost get -p foo -- github.com/go-sql-driver/mysql  # 'foo' is the name you give to the path above.

它将帮助您设置 GOPATH 并运行命令。但是请记住,您已经将路径添加到了 gost路径空间中。如果您位于 /home/foobar/bar的任何级别的子目录下,您甚至可以运行下面的命令,简而言之,该命令将执行相同的操作:

$ gost get -- github.com/go-sql-driver/mysql

gost是一个简单的围棋工具,它可以帮助您管理 GOPATHs 和运行围棋命令。有关如何使用它运行其他 Go 命令的详细信息,可以只运行 gost help goCmdName。例如,你想知道更多关于 install的信息,只要输入以下单词:

$ gost help install

您还可以在项目的 README: https://github.com/byte16/gost/blob/master/README.md中找到更多细节

运行‘ go env’并查看 GOPATH 当前指向的位置。如果你改变到那个目录,你的’去获得。.等等的命令应该起作用。

这个问题发生在我的树莓圆周率。我通过 VNC 客户端登录 尽管设置并导出了 GOPATH,问题仍然存在。 然后在没有使用 sudo 的情况下运行“ go get”命令,结果非常完美。

我使用 vim 来编辑我的.bashrc 文件,但是您的代码使用了 GUI 编辑器,比如 gedit

步骤:

请替换 /path/to/golang/projects下面与您的实际路径位置,您将存储您的 Golang 项目。

在 vim 中打开一个名为 vim ~/.bashrc的.bashrc 文件,然后在文件末尾添加以下几行。

# Setup Golang Development Environment ::
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
 

# Third party go libraries will live under "~/golib" directory
export GOPATH="$HOME/golib"
export PATH="$PATH:$GOPATH/bin"
 

# Where your golang project code lives
export GOPATH=$GOPATH:/path/to/golang/projects

保存文件并键入 source ~/.bashrc刷新终端会话。 现在尝试获取一个包,例如 go get github.com/pilu/fresh,并检查您的 ~/golib/bin目录,它应该包含 fresh包。

导航到 /path/to/golang/projects并在其中创建三个文件夹,即 binsrcpkg

现在把你的项目文件夹放在 /path/to/golang/projects/src里面,例如 /path/to/golang/projects/src/myfancygolangproject,你就可以开始了。把你所有的戈兰密码都放进去,伙计。