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
更新:我本应首先检查代码仓库,模块名称从第一次提交起确实是正确的。
奇怪…
更多关于Golang中使用go mod tidy遇到奇怪错误如何解决的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
很高兴听到推送新版本成功了。
代理服务器有点棘手,因为它运行得非常流畅和透明,在日常操作中完全不可见。因此,如果出现与模块相关的错误,代理通常是最后才会想到的。
是的,这正是我的意思……但另一方面,GitHub 仓库中的提交记录里,没有一个 go.mod 文件的模块路径是以 githum 开头的。我很好奇这个错误的拼写是如何、在哪里潜入(然后又消失)的。
嗯……正如我在今天早些时候的原帖中提到的那样,为了绕过这个问题,我删除了Github上原来的hdump仓库,并创建了一个新的(同名)仓库。所以,很可能在过去某个时间点,确实有一个在go.mod文件中存在拼写错误的提交。
我猜没有办法清除代理服务器中的缓存副本,对吧?明天,我会创建一个新版本再试一次。
您极大地增进了我对 Go 模块工作原理的理解。感谢您对一位新手的耐心。
我花了一些时间才理解“记住 left-pad”的含义。是的,我明白了其中的关联。
我之前也不知道‘retract’这个功能。
您的建议(推送一个新版本)确实解决了问题。一旦了解到存在代理服务器这样的东西,一切就都说得通了。我之前阅读的资料遗漏了这个细节。
再次感谢。我将此问题标记为已解决。
你好 @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模块缓存并重置依赖关系。以下是解决步骤:
- 清理模块缓存:
go clean -modcache
- 删除go.sum文件:
rm go.sum
- 重新执行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
这应该能解决模块路径不匹配的问题。


