如何修复解析 go.mod 模块将其路径声明为“x”但需要为“y”

Fin*_*ber 34 go

我正在开发一个依赖于original-project. 我现在想通过修改original-project. 所以我克隆github.com/y/original-projectgithub.com/x/my-version并替换了所有出现的github.com/y/original-projectwith github.com/x/my-version(包括 in mod.go)。

但我不断收到此错误:

go: github.com/x/my-version@v0.5.2: parsing go.mod:
    module declares its path as: github.com/y/original-project
            but was required as: github.com/x/my-version
Run Code Online (Sandbox Code Playgroud)

即使我跑步go get -u -v -f allgithub.com/x/my-version

我可能做错了什么?

ser*_*io4 16

我有类似的问题。我最终删除了我试图导入并go mod init ...再次运行的项目中的 go.mod 文件。它修复了它。

另外,go clean -modcache在您要导入的地方运行。

然后试试go get ...你的包。

  • 令人惊讶的是,对于分叉项目根本不起作用 (3认同)
  • 如果您有 IDE,请在执行此过程之前将其关闭。我成功地使用了 `go mod tidy` 而不是 `go get...` - 当然最终得到了更新的依赖项。 (2认同)

小智 13

我目前正在开发一个 Go 包并遇到了这个问题。我最初使用文件module <package-name>顶部的语法go.mod。由于模块未正确下载,我将语法更改为module github.com/<user>/<package-name>. 不幸的是,即使我手动删除了依赖项,我的系统仍然停留在旧的下载缓存上。

为了解决这个问题,我在 GitHub 上为该项目创建了一个新的发布标签 ( v0.0.1-beta),现在它可以正常下载了。go get存储带有版本标签的模块,因此这就绕过了这个问题。

  • @gregtsar我相信你的问题出在Golang代理服务器上,它保存下载的软件包版本的缓存。您可以尝试设置:export GOPROXY=direct 来消除标准的 https://proxy.golang.org 行为 (3认同)
  • 这是此页面上唯一对我有用的解决方案。在新项目上添加版本标签,然后手动更新 mod.go 以指向新的包和版本,然后我就可以运行“go mod tidy”和“go modvendor”(在我的例子中)以及所有自动更正。当然,我确实必须更新导入路径,但替换指令可以避免这种情况。 (2认同)

Ram*_*ino 13

诀窍是更新go mod缓存。

go.mod因此,在(ie )中进行所需的更改后github.com/X/Z => github.com/Y/Z,您需要下载最新版本来更新您的本地go mod缓存。

IEgo get github.com/Y/Z@fd02212

然后错误消息就会消失。


Dim*_*rov 12

我认为问题来自于go.mod你的克隆版本original-project仍然说module github.com/y/original-project. 您应该使用go.mod replace指令。它完全适用于像您这样的情况。

replace github.com/y/original-project => /path/to/x/my-version
Run Code Online (Sandbox Code Playgroud)

  • 为什么,会发生什么?你能提供更多细节吗? (4认同)
  • 要轻松完成此操作,您可以通过命令行执行此操作: `go mod edit -replace="github.com/y/original=github.com/x/version@latest"` 或者您可以指定版本。 (4认同)
  • 这应该是公认的解决方案。发生的情况是,它在模块级别替换(存根)模块,而不为使用它的每个文件创建混乱的差异。 (2认同)

小智 7

使用go mod edit -replace命令。

示例1:

go mod edit -replace github.com/y/original-project=github.com/x/my-version@v0.5.2

示例2:

go mod edit -replace github.com/codahale/hdrhistogram=github.com/HdrHistogram/hdrhistogram-go@v0.9.0

来自: https: //github.com/HdrHistogram/hdrhistogram-go


The*_*ver 6

就我而言,我不想只修复本地问题,但要确保它对每个人都有效。

更改 go.mod 中的值后(最好删除 go.mod 和 go.sum 文件,然后运行

go mod init github.com/organization/new-package-name
go mod tidy
go get github.com/organization/new-package-name
Run Code Online (Sandbox Code Playgroud)

上面并没有真正解决我的问题,也没有go clean -modcache

对我有用的是删除然后在新分叉的项目上重新创建标签。(建议:从 Git 存储库中删除所有标签

然后创建一个新标签。

git tag v1.0.0 -m "new version"
git push origin v1.0.0
Run Code Online (Sandbox Code Playgroud)

之后,您可以通过安装

go get github.com/organization/new-package-name@latest
Run Code Online (Sandbox Code Playgroud)

或者

go get github.com/organization/new-package-name@v1.0.0
Run Code Online (Sandbox Code Playgroud)