无法下载,$ GOPATH没有设置

我想安装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上?

[更新:从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。 您也可能需要在.bashrc export PATH=$PATH:$GOPATH/bin ,以便在$GOPATH下运行已编译的程序。

或者, 通过Rob Pike ,你也可以设置CDPATH所以在bash中打包dirs更快: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/x表示你可以键入cd net/html而不是cd $GOPATH/src/golang.org/x/net/html

Keith Rarick 指出,你可以设置GOPATH=$HOME ,把Go的src/pkg/bin/目录放在你的homedir下。 这可以是很好的(例如,你可能已经在你的path中有$HOME/bin ),但是当然有些人使用多个工作空间等等。

我已经尝试了很多个星期。

这一个工作

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

脚步

 mkdir ~/go 

在.bashrc中设置$ GOPATH,

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

使用酿造

我用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)*

export 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来检查它是否正确configuration:

 $ 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在我的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 ,使它们在重新启动之间保持$GOPATH

观看video

总的来说,我总是推荐Go的官方video来快速浏览一下这个问题:

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

比被告知更容易显示。

@ jwfearn解释了video的重要部分:

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

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

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

 sudo nano /etc/bashrc 

并在文件末尾添加下面的内容

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

这应该解决这个问题。 尝试打开一个新的terminal并回显$ GOPATH你应该看到正确的值。

我发现这样做更容易:

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

(对于MAC)

我尝试了所有这些答案,还有一些还不为人知的原因,他们都没有工作。

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

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

甚至glide给了我GOPATH not set错误。 再次通过“强制喂食”解决了这个问题:我尝试了所有这些答案,而且由于一些原因不明,他们都没有工作。

我必须通过为每个需要它的命令设置环境variables来“强制馈送”GOPATH。

 sudo env GOPATH=$HOME/goWorkDirectory glide install 

希望这有助于某人。

如果在设置了$GOPATH之后遇到这个问题,可能是因为您正在使用不支持的shell运行它。 我正在使用fish ,它不起作用,启动与bash工作正常。

你的$GOROOT不应该被设置。 您应该将$GOPATH设置为$HOME/go是inputexport $GOPATH=$HOME/go

请inputexport GOROOT=""来解决您的问题。

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

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

sudo -E go run main.go

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