【问题标题】:Go : go get $GOPATH error, when GOPATH is setGo : go get $GOPATH error, 当 GOPATH 被设置时
【发布时间】:2014-09-06 20:24:49
【问题描述】:

运行 go get 命令时:

sudo go get github.com/go-sql-driver/mysql

我收到以下错误

package github.com/go-sql-driver/mysql: 不能下载,$GOPATH 不能 放。更多详情见:go help gopath

不过 $GOPATH 已经设置好了。

运行echo $GOPATH 得到/Users/userxyz/Desktop/Code

运行go env 给出

.....

GOPATH="/Users/userxyz/Desktop/Code"

...

GOROOT="/usr/local/go"

.....

我已经尝试通过添加以下行将 GOPATH 设置为环境变量

export GOPATH="$HOME/Desktop/Code"
export PATH=$PATH:$GOPATH/bin

到以下文件,或者

~/.profile (/etc/profile)
~/.bashrc
~/.bash_profile

【问题讨论】:

    标签: macos go environment-variables osx-mavericks


    【解决方案1】:
    sudo go get github.com/go-sql-driver/mysql
    

    这在root 用户下运行go get,该用户没有设置$GOPATH

    只要做:

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

    一般来说,这样做:

    go get
    

    在项目文件夹中,它将安装所有依赖项。以下将安装测试中提到的依赖项:

    go get -t
    

    【讨论】:

    • 我有一个疑问,不会在 /etc/profile 中设置 GOPATH,为所有用户设置 GOPATH 吗?
    • sudo env | grep GO 打印什么?无论如何,你为什么需要使用sudo go
    • 我不需要使用 sudo,我只是想知道,因为我的理解是 /etc/profile 在系统范围内更新 GOPATH,而 sudo env | grep GO 什么也不返回。
    • 我不是Unix大师,但也许你需要重新启动? See also
    • @Tyguy7 你把变量加到~/.profile了吗?
    【解决方案2】:

    您只需删除sudo。 您的环境变量是在用户级别定义的。如果你这样做 sudo go env 你会看到 GOPATH 没有设置在那里

    【讨论】:

    • 即使没有 sudo,这个问题仍然存在。
    【解决方案3】:

    你不需要 sudo。如果“同意 Xcode/iOS 许可证需要管理员权限”阻止您,只需重新打开 Xcode 并接受 Xcode 的许可协议即可。

    【讨论】:

      【解决方案4】:

      写完回复后才意识到已经晚了将近 4 年,但我会保留它,以防其他人可能需要答案...

      看来您可能已经使用 sudo 或 root 权限创建了目录。如果你用普通用户尝试$go get,你会得到一个权限错误,当你用 sudo 尝试它时,你会得到一个 GOPATH 未设置错误。我最近遇到了这个问题,我通过简单地更改目录的所有权来解决它。

      export GOPATH=/directory/of/your/goproject
      chown -R ubuntu@staff $GOPATH
      cd $GOPATH && go get 
      

      这里只是为了让您有一些环境变量需要仔细检查:

      export GOPATH=/home/ubuntu/work export
      PATH=$PATH:$GOROOT/bin:$GOPATH/bin
      

      请记住,您不需要声明或更改 $GOROOT。


      最后,您可能想使用 [profile.d][1] 导出环境变量:

      cat > /etc/profile.d/setgoenv.sh <<EOL
      export GOPATH=/home/ubuntu/work
      export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
      EOL
      

      我希望这会有所帮助。

      【讨论】:

        【解决方案5】:

        就我而言,我在PATH 中导入了一个不存在的不正确GOPATH 和一个不正确的GOROOT

        设置我的export GOROOT=/opt/go 然后export GOPATH=$HOME/work,确保$HOME/work 存在并且我的用户可以访问似乎已经解决了go get {whattoget} 的问题,然后确保export GOPATH=$HOME/work export PATH=$PATH:$GOROOT/bin:$GOPATH/bin 在我的~/.profile 中有帮助。此线程中的任何内容似乎都不太合适。

        接下来我可能会开始使用 Docker 来构建我的 go 项目,因为这有点痛苦,而且文档和错误很长,但似乎并没有以任何有意义和清晰的方式解释什么是错误的 (@ 987654330@ 和 GOPATH 都已设置,但 PATH GOROOTGOPATH 似乎都有些偏差)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-29
          • 2014-03-24
          • 2015-03-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多