Golang中使用go mod tidy遇到奇怪错误如何解决

Golang中使用go mod tidy遇到奇怪错误如何解决 这个论坛多次阻止我写入GitHub网址,所以我已将以下内容中的“.com”移除。 我对Go还比较陌生,但从事计算机行业已有数十年。我对下面的错误感到困惑: 我有一个Go模块,它导入了我的另一个名为“hdump”的包。当它是本地模块时(通过“…/hdump”可用),一切正常。但后来我把它移到了GitHub上。当我将导入改为引用“github/tgphelps/hdump”并执行“go mod tidy”时,我得到:

$ go mod tidy
go: github/tgphelps/hdump@v0.0.1: parsing go.mod:
	module declares its path as: githum/tgphelps/hdump
	        but was required as: github/tgphelps/hdump

你可以查看github/tgphelps/hdump上的go.mod文件,会发现它并没有那样声明自己(不是“githum”,而是“github”)。我为此折腾了一整天,看不出问题出在哪里。过去可能有一段时间,GitHub上的hdump模块确实存在那个错误,但为了确保它已消失,我删除了那个GitHub仓库,验证了go.mod是正确的,并重新创建了一个github/tgphelps/hdump,其中任何地方都没有“githum”字样。但我仍然收到那个错误!这怎么可能发生?

我的调用包开头是:

package trc

import (
	"fmt"
	"io"
	"github/tgphelps/hdump"
)

它的go.mod文件内容是:

module github/tgphelps/trc

go 1.17

我看不出调用包哪里有问题。有人能帮我解惑吗?


更多关于Golang中使用go mod tidy遇到奇怪错误如何解决的实战教程也可以访问 https://www.itying.com/category-94-b0.html

9 回复

更新:我本应首先检查代码仓库,模块名称从第一次提交起确实是正确的。

奇怪…

更多关于Golang中使用go mod tidy遇到奇怪错误如何解决的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


很高兴听到推送新版本成功了。

代理服务器有点棘手,因为它运行得非常流畅和透明,在日常操作中完全不可见。因此,如果出现与模块相关的错误,代理通常是最后才会想到的。

是的,这正是我的意思……但另一方面,GitHub 仓库中的提交记录里,没有一个 go.mod 文件的模块路径是以 githum 开头的。我很好奇这个错误的拼写是如何、在哪里潜入(然后又消失)的。

哦,好的,这或许能解释这个错误。

无法从模块代理中移除版本。这个设计决定是刻意的,还记得 left-pad 事件吗!

不过,你可以推送一个新版本并撤回那个有问题的版本。

嗯……正如我在今天早些时候的原帖中提到的那样,为了绕过这个问题,我删除了Github上原来的hdump仓库,并创建了一个新的(同名)仓库。所以,很可能在过去某个时间点,确实有一个在go.mod文件中存在拼写错误的提交。

我猜没有办法清除代理服务器中的缓存副本,对吧?明天,我会创建一个新版本再试一次。

您极大地增进了我对 Go 模块工作原理的理解。感谢您对一位新手的耐心。

我花了一些时间才理解“记住 left-pad”的含义。是的,我明白了其中的关联。

我之前也不知道‘retract’这个功能。

您的建议(推送一个新版本)确实解决了问题。一旦了解到存在代理服务器这样的东西,一切就都说得通了。我之前阅读的资料遗漏了这个细节。

再次感谢。我将此问题标记为已解决

(感谢关于反引号的提示。我编辑了帖子,让它看起来好多了。)

是的,我之前很可能打错了字(githum.com),但我现在也无法确定。那个拼写错误会不会在 Go 模块代理服务器中缓存好几个月?从我最初创建那个仓库到现在已经过去那么久了。

我会按照你的建议去做,推送一个新版本。(我是这方面的新手。我猜“推送一个新版本”是指创建一个新的 git 标签,比如 v0.0.2。)

你好 @tgphelps

你是否可能确实将模块声明为 githum.com/...,之后才更正了这个拼写错误?

如果是这样,这个拼写错误可能仍然缓存在 Go 模块代理服务器上。

→ 尝试向 GitHub 推送一个新的版本号(例如 v0.0.2),然后执行 go get github.com/tgphelps/hdump@v0.0.2(或者 go get github.com/tgphelps/hdump@latest)。

(顺便提个快速建议:使用反引号将文本标记为代码,并使用一行三个反引号来开始和结束一个代码块。这样,URL 在论坛编辑器中应该就不会再造成问题了。)

这个错误是因为Go模块缓存中仍然存在旧的、拼写错误的模块路径。即使你删除了GitHub仓库并重新创建,本地缓存和go.sum文件可能仍然保留着之前的错误记录。

你需要清理Go模块缓存并重置依赖关系。以下是解决步骤:

  1. 清理模块缓存
go clean -modcache
  1. 删除go.sum文件
rm go.sum
  1. 重新执行go mod tidy
go mod tidy

如果问题仍然存在,可能是因为你的项目中有其他依赖间接引用了旧的模块路径。检查go.mod文件中是否有replace指令或间接依赖:

# 查看所有依赖
go list -m all

# 检查是否有replace指令
cat go.mod | grep replace

如果发现其他模块依赖了错误的路径,你可能需要:

# 移除特定的模块缓存
go clean -modcache -cache

或者手动删除缓存目录中的相关模块:

# 在Unix系统上
rm -rf ~/go/pkg/mod/github.com/tgphelps/hdump@*

# 在Windows系统上
rmdir /s %USERPROFILE%\go\pkg\mod\github.com\tgphelps\hdump@*

完成这些步骤后,重新运行:

go mod tidy

这应该能解决模块路径不匹配的问题。

回到顶部