为什么“go get”有时会检索过时的提交?

Why does “go get” sometimes retrieve an outdated commit?

我创建了一个 Go 模块并将其放在 github.com/bronger/abcde。我错误地在其 go.mod 中将其声明为 module abcde。因此,Dockerfile 中的 go get github.com/bronger/abcde(即没有我的本地程序副本)失败并显示

#10 0.824 go: downloading github.com/bronger/abcde v0.0.0-20210813180406-8d5688e6c805                                                 #10 0.866 go get: github.com/bronger/abcde@none updating to
#10 0.866       github.com/bronger/abcde@v0.0.0-20210813180406-8d5688e6c805: parsing go.mod:
#10 0.866       module declares its path as: abcde
#10 0.866               but was required as: github.com/bronger/abcde

所以我在go.mod中更正了模块名称并推送了结果。

最终,这行得通。但是,go get 最终检测到更改可能需要很长时间(30-60 分钟)。最新的错误提交是 8d5688e,它也出现在上面的错误消息中。即使在 80c407b 是 GitHub 上的最新提交之后的几分钟,go get 仍然抱怨 8d5688e

这是为什么?

默认情况下,Go 工具使用 Go 团队提供的代理。这意味着对模块的更改可以缓存一段时间。您可以在他们的网站上找到更多相关信息:https://proxy.golang.org/.

GOPROXY=off 设置为环境变量将禁用此代理。