【问题标题】:cannot download, $GOPATH not set无法下载,$GOPATH 未设置
【发布时间】:2014-01-04 21:44:50
【问题描述】:

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

【问题讨论】:

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

标签: macos installation go


【解决方案1】:

[更新:从 Go 1.8 开始,GOPATH 默认为 $HOME/go,但如果您想了解 GOPATH 布局、对其进行自定义等,您可能仍然会发现这很有用]

围棋官方网站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/。您可能还需要在您的.bashrc 中添加export PATH=$PATH:$GOPATH/bin,这样您就可以在$GOPATH 下运行已编译的程序。

(可选)via Rob Pike,您也可以设置CDPATH,这样cd 可以更快地在 bash 中打包目录: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)但当然有些人使用多个工作区等。

【讨论】:

  • 感谢您的信息。您是否需要为每个单独的项目更改工作区?
  • 一般来说,不,您可以使用src/ 包含例如github.com/youruser/x 和 github.com/youruser/y。我就是做这个的。人们可能有理由不这样做(公司政策将项目分开?),但我不能说。
  • $GOPATH 已设置,但仍然出现“无法下载,$GOPATH 未设置。有关详细信息,请参阅:go help gopath”。
  • 什么平台(Windows 或 Linux/OS X/其他 Unix)?如果不是 Windows,echo $GOPATH 会说什么?可能值得将其作为一个单独的问题发布;听起来您遇到了一些不寻常的情况,在 cmets 中调试它们可能会很棘手。
  • @Tyguy7 你可能没有export 它;运行/bin/bash -c "echo \$GOPATH" 验证子进程可以看到$GOPATH;如果它回显为空,则运行export GOPATH,然后运行go get ...
【解决方案2】:

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

【讨论】:

  • 如果我是一个新手,我还不知道“我希望我的 GOPATH 在哪里”。恕我直言,没有 default GOPATH 行为可以被环境变量覆盖,这是一个拖累。
【解决方案3】:

观看视频

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

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

展示比告诉更容易。

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

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

【讨论】:

  • 优秀的介绍性视频 - 当它展示给我时,我总是能更好地理解。
  • 感谢@jwfearn - 视频用于音乐和其他娱乐;不能从他们那里复制和粘贴:-)
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    这个成功了

    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
    

    【讨论】:

    • 链接已失效。
    【解决方案6】:

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

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

    sudo -E go run main.go

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

    【讨论】:

    • 不知道为什么这被否决了,但为我修好了……
    【解决方案7】:

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

    导出 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 呢?那是因为$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,以使它们在重新启动之间保持不变。

    【讨论】:

      【解决方案8】:

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

      sudo nano /etc/bashrc
      

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

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

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

      【讨论】:

        【解决方案9】:

        (对于 MAC)

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

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

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

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

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

        sudo env GOPATH=$HOME/goWorkDirectory glide install
        

        希望这对某人有所帮助。

        【讨论】:

          【解决方案10】:

          我发现这样做更容易:

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

          【讨论】:

            【解决方案11】:

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

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

            【讨论】:

              【解决方案12】:

              您可以像其他人建议的那样使用“导出”解决方案。为了永久方便,我想为您提供另一种解决方案:您可以在运行 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 的路径添加到 pathspace 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 的pathspace。如果你在/home/foobar/bar 的任何级别的子目录下,你甚至可以运行下面的命令来做同样的事情:

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

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

              $ gost help install
              

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

              【讨论】:

                【解决方案13】:

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

                【讨论】:

                  【解决方案14】:

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

                  【讨论】:

                    【解决方案15】:

                    我正在使用 vim 编辑我的 .bashrc 文件,但您的代码使用 gui 编辑器,例如 gedit。

                    步骤:

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

                    在 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 并在其中创建三个文件夹,即bin、src 和pkg

                    现在将您的项目文件夹放在/path/to/golang/projects/src 中,例如/path/to/golang/projects/src/myfancygolangproject你应该很高兴。把你所有的 golang 代码库放在那里。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2015-03-04
                      • 2014-02-25
                      • 2013-11-20
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2014-09-06
                      相关资源
                      最近更新 更多