无法下载,未设置$ GOPATH


150

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

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

有关如何在MacOS上解决此问题的任何帮助?




3
我在使用其他包装(小狗)时遇到了同样的问题。来吧维护人员,请制作一个(OS X)安装程序以完成工作!Node的OS X安装程序就是一个很好的例子。使用Node不需要其他手动安装步骤。它只是工作。我希望Go安装程序的将来版本会更好。
jwfearn 2014年

Answers:


140

[更新:从Go 1.8开始,GOPATH默认为$HOME/go,但是如果您想了解GOPATH布局,自定义布局等,可能仍会觉得有用。]

官方的Go网站讨论了GOPATH以及如何布置工作空间目录

export GOPATH="$HOME/your-workspace-dir/"-在您的shell中运行它,然后将其添加到~/.bashrc或等同版本中,以便将来为您设置。Go会在安装包src/bin/以及pkg/,子目录那里。您需要将自己的软件包放在下的某处$GOPATH/src,就像$GOPATH/src/github.com/myusername/您要发布到GitHub一样。你也可能会想export PATH=$PATH:$GOPATH/bin在你.bashrc下这样你就可以编译运行的程序$GOPATH

您也可以选择通过Rob Pike进行设置,CDPATH以便更快地cd将dirs打包到bash中:这export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/x意味着您可以输入cd net/html而不是cd $GOPATH/src/golang.org/x/net/html

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


谢谢(你的)信息。您是否需要为每个项目更改工作区?
Doug Molineux 2015年

1
通常,不能,您可以使用一个src/包含例如github.com/youruser/x和的工作区github.com/youruser/y。我就是做这个的。人们可能有其他理由这样做(公司政策以使项目分开吗?),但是我不能拒绝。
twotwotwo

3
$ GOPATH已设置,但是“无法下载,$ GOPATH未设置。有关更多详细信息,请参见:go help gopath”。
Tyguy15年

什么平台(Windows或Linux / OS X /其他Unix)?如果不是Windows,echo $GOPATH该怎么说?可能值得将其作为一个单独的问题发布。听起来好像您处在某种异常情况下,调试注释中的代码可能很棘手。
twotwotwo

2
@ Tyguy7机会不是吗export?运行/bin/bash -c "echo \$GOPATH"以验证子流程可以看到$GOPATH;如果回声为空,则运行export GOPATH然后go get ...
sanmai


33

使用酿造

我使用安装了它brew

$ brew install go

完成后,如果运行此brew命令,它将显示以下信息:

$ 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)*

导出PATH = $ PATH:/ usr / local / opt / go / libexec / bin

设置GO的环境

那显示了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

好的,为什么我不能输入json2csv我的外壳?这是因为下的/bin目录$GOPATH不在您的上$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,使他们重新引导之间依然存在。


18

观看影片

总的来说,我总是推荐Go中的官方视频,以快速概述此事:

http://www.youtube.com/watch?v=XCsL89YtqCs

被展示比被告知要容易。

@jwfearn解释了视频的重要部分:

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


2
精彩的入门视频-当向我展示时,我总是会更好地理解。
约书亚·品特

3
感谢@jwfearn-视频用于音乐和其他娱乐;无法从中复制和粘贴:-)
kguest


3

对于MAC,这对我来说效果很好。

sudo nano /etc/bashrc

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

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

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


2

(对于MAC)

我尝试了所有这些答案,但由于某些仍然未知的原因,它们都不起作用。

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

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

甚至glide给了我GOPATH not set错误。再次通过“强制喂食”解决了该问题:我尝试了所有这些答案,但由于某些未知的原因,它们都不起作用。

我必须通过为每个需要它的命令设置环境变量来“强制输入” GOPATH。

sudo env GOPATH=$HOME/goWorkDirectory glide install

希望这对某人有帮助。


2

$GOROOT不应该设置。您$GOPATH应该$HOME/go输入以下内容export $GOPATH=$HOME/go

请输入export GOROOT=""以解决您的问题。


1

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


4
如果我是菜鸟,我还不知道“我希望我的GOPATH在哪里”。恕我直言,这是一个拖延,因为没有默认的 GOPATH行为可以被环境变量覆盖
jwfearn '16

0

如果在$GOPATH设置后遇到此问题,则可能是因为您正在使用不受支持的Shell来运行它。我正在使用fish它,但是没有用,可以bash正常运行。


0

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

首先,您需要下载一个名为gosthttps : //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...]

例如,要运行go get github.com/go-sql-driver/mysql/home/foobar/bar作为GOPATH,只是做如下图所示:

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

这将帮助您设置GOPATH并运行命令。但请记住,你已经添加的路径进入gostpathspace。如果您在的子目录的任何级别下/home/foobar/bar,您甚至可以运行下面的命令,该命令可以简短地完成相同的操作:

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

gost是Go的简单工具,可以帮助您管理GOPATH和运行Go命令。有关如何使用它运行其他Go命令的更多详细信息,您可以运行gost help goCmdName。例如,您想了解更多有关的信息install,只需在下面输入文字:

$ gost help install

您还可以在项目的自述文件中找到更多详细信息:https : //github.com/byte16/gost/blob/master/README.md


0

运行“ go env”,然后查看您的GOPATH当前指向的位置。如果更改到该目录,则“ go get..etc”命令应该起作用。


0

我在树莓派中发生了这个问题。我已通过VNC客户端登录尽管设置和导出了GOPATH,问题仍然存在。然后运行没有sudo的“ go get”命令,它运行良好。


-1

我必须以root用户身份运行应用程序(要在端口80上打开Web服务器),这对我产生了错误,因为sudo用户的环境与普通用户不同,因此未设置GOPATH。

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

sudo -E go run main.go

有关更多信息,请参见此处的讨论:Google网上论坛– GOPATH问题


不知道为什么要拒​​绝它,但要为我解决…
Pwdr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.