无法下载,$ GOPATH未设置

时间:2013-12-17 08:06:03

标签: macos installation go

我想使用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上解决此问题的任何帮助吗?

15 个答案:

答案 0 :(得分:131)

[更新:从第1.8步开始,GOPATH默认为$HOME/go,但如果您想了解GOPATH布局,自定义等,您仍可能会发现这很有用。

Go官方网站discusses GOPATH and how to lay out a workspace directory

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

可选择via Rob Pike,您也可以设置CDPATH,以便{b}以cd方式打包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 notes您可以设置GOPATH=$HOME将Go的src/pkg/bin/目录放在您的homedir下。这可能很好(例如,您的路径中可能已经有$HOME/bin)但当然有些人使用多个工作区等。

答案 1 :(得分:81)

这个工作

Setting up Go development environment on Ubuntu, and how to fix $GOPATH / $GOROOT

<强>步骤

mkdir ~/go

在.bashrc中设置$ GOPATH,

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

答案 2 :(得分:31)

使用brew

我使用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检查是否正确配置:

$ 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?那是因为/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,以便在重新启动之间保持这些修改。

答案 3 :(得分:17)

观看视频

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

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

显示比被告知更容易。

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

  

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

答案 4 :(得分:4)

我觉得这样做更容易:

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

答案 5 :(得分:3)

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

sudo nano /etc/bashrc

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

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

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

答案 6 :(得分:2)

(针对MAC)

我尝试了所有这些答案,并且由于一些仍然未知的原因,它们都没有奏效。

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

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

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

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

sudo env GOPATH=$HOME/goWorkDirectory glide install

希望这有助于某人。

答案 7 :(得分:2)

不应设置$GOROOT。 通过输入$GOPATH

,您$HOME/go应设置为export $GOPATH=$HOME/go

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

答案 8 :(得分:1)

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

答案 9 :(得分:0)

如果在设置$GOPATH后遇到此问题,可能是因为您使用不受支持的shell运行它。我正在使用fish并且它无法正常工作,使用bash启动它工作正常。

答案 10 :(得分:0)

您可以像其他人建议的那样使用“导出”解决方案。我想为您提供另一种永久方便的解决方案:在运行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...]

例如,您希望以go get github.com/go-sql-driver/mysql作为GOPATH运行/home/foobar/bar,只需执行以下操作:

$ 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是一个简单的Go工具,它可以帮助您管理GOPATH并运行Go命令。有关如何使用它来运行其他Go命令的更多详细信息,您只需运行gost help goCmdName即可。例如,您想了解有关install的更多信息,只需在下方输入以下字词:

$ gost help install

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

答案 11 :(得分:0)

运行'go env'并查看您的GOPATH当前指向的位置。如果您切换到该目录,那么'go get..etc'命令应该可以正常工作。

答案 12 :(得分:0)

树莓派发生了这个问题。我已经通过VNC客户端登录了 尽管设置和导出GOPATH,问题仍然存在。 然后跑去&#34;去得到&#34;没有sudo的命令,它运作得很好。

答案 13 :(得分:0)

我正在使用vim编辑我的.bashrc文件,但是您使用的是GUI编辑器,例如gedit

步骤:

请在下面用您要存储golang项目的实际路径位置替换/path/to/golang/projects

vim ~/.bashrc的vim中打开.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,您应该很好。将所有golang代码库都放在那里。

答案 14 :(得分:-1)

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

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

sudo -E go run main.go

有关更多信息,请参阅此处的讨论:Google Groups – GOPATH Problem