【问题标题】:Getting GOPATH error "go: cannot use path@version syntax in GOPATH mode" in Ubuntu 16.04在 Ubuntu 16.04 中出现 GOPATH 错误“go: cannot use path@version syntax in GOPATH mode”
【发布时间】:2019-01-29 07:18:47
【问题描述】:

我无法在我的$GOPATH 文件夹中运行go get git@github<user/repo>。 收到此错误:

go: 在 GOPATH 模式下不能使用 path@version 语法

我只是想了解为什么go get 无法正常工作,即使在安装过程中配置了$GOPATH。环境是ubuntu。

~/$ echo $GOPATH
/home/user/go

【问题讨论】:

  • 你试过go get github.com/user/repo吗?
  • 问题在于回购格式,而不是git@github<user/repo> 我不得不使用github.com/<user>/<repo>
  • 同步你去 mod 它将解决问题。确保不要重复依赖

标签: go gopath


【解决方案1】:

我遇到了同样的问题并解决了在我的 .zshrc(或 .bashrc 取决于您使用的 shell)中设置特定的环境变量 export GO111MODULE=on 并重新启动 shell 以启用模块。您可以在此处找到更多详细信息:https://github.com/golang/go/wiki/Modules

【讨论】:

  • 我不确定这是否真的解决了问题?!我的意思是,这个 env 变量禁用了“GOPATH 模式”(从 Go v1.13 开始默认情况下禁用),但 git@github<user/repo> 仍然不是“path@version 语法”,所以它仍然不起作用?
  • Google 必须在 1.14 或 1.15 中默认启用它,因为我在 1.15 中收到此错误消息。我确实看到有一个请求请求在 1.16 中再次修复这个问题。这件事要经常改变以跟上。
  • 其实从 1.16 版本开始,GO111MODULE=on 是默认设置的。
【解决方案2】:

正如您已经注意到的,您应该使用go get github.com/<user>/<repo>

您看到的错误消息来自go get 中实现以支持Go modules 的新功能 - 您现在还可以指定依赖项的版本:go get github.com/<user>/<repo>@<version>,其中version 是使用 semver 的 git 标记,例如v1.0.2.

【讨论】:

    【解决方案3】:

    我也遇到过这个问题。经过一番搜索,以下工作是使用go mod 而不是go get,这是Golang Modules 的一个功能:

    $ export GO111MODULE=on
    
    $ go mod init <project name>
    
    # go mod init HelloWorld
    # or
    # go mod init .
    
    $ go mod download repo@version
    
    # go mod download github.com/robfig/cron/v3@v3.0.0
    

    【讨论】:

      【解决方案4】:

      在我使用模块初始化我的项目之前,在一个空项目上运行 $ go get github.com/&lt;user&gt;/&lt;repo&gt;@&lt;version&gt; 时,我在 Go v1.14 中遇到了这个错误。

      为了解决这个问题,我使用以下方法创建了一个go.mod 文件:

      $ go mod init

      我能够成功地重新运行 get 命令,它下载了供应商的包,更新了 go.mod 文件,并创建了一个 go.sum 文件。

      【讨论】:

      【解决方案5】:

      如果您在尝试使用模块时遇到此错误,您应该在 go get 之前将 dir 更改为 project:

      root@host:/# go get github.com/ibm-messaging/mq-golang/ibmmq@ff54c095001d81eed10615916a896512eb8d81ff
      go: cannot use path@version syntax in GOPATH mode
      root@host:/# cd myproject/
      root@host:/myproject# ls go.mod 
      go.mod
      root@host:/myproject# go get github.com/ibm-messaging/mq-golang/ibmmq@ff54c095001d81eed10615916a896512eb8d81ff
      go: finding github.com ff54c095001d81eed10615916a896512eb8d81ff
      go: finding github.com/ibm-messaging/mq-golang/ibmmq ff54c095001d81eed10615916a896512eb8d81ff
      go: finding github.com/ibm-messaging/mq-golang ff54c095001d81eed10615916a896512eb8d81ff
      go: finding github.com/ibm-messaging ff54c095001d81eed10615916a896512eb8d81ff
      

      【讨论】:

      • 如果您使用的是较新版本的 Go (1.14+) 并且您的遗留 Go 项目尚未准备好进入 Go 模块,则此方法有效。这是全局安装工具的好方法。但是您必须改用go install,并确保echo $GOBIN 打印出类似~/go/bin 的内容(并且GOBIN 在您的PATH 中),所以它仍然可以像以前在旧版本的Go 中那样工作
      【解决方案6】:

      按照https://gist.github.com/nikhita/432436d570b89cab172dcf2894465753的说明更新版本的go

      这对我有用!

      【讨论】:

      【解决方案7】:

      当我尝试在初始化 go mod 的目录之外的目录中运行命令时遇到了这个问题。为了下载具有特定版本的模块,go 需要 go.mod 文件,该文件可以跟踪同一模块的多个版本。但是,尝试在 go 模块目录(将引用 GOPATH 以存储下载模块)之外的任何其他位置下载模块将失败,因为没有选项可以跟踪同一模块的不同版本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多