该问题的答案是:该问题基于错误的前提。
也就是说,我最初认为go build失败之前的最后一条语句是失败的,但是我错了。实际上,如果模块不是可拉式的,您将为其获取明确的错误报告,例如:
go: github.com/golang/glog@v0.0.0-20160126235308-23def4e6c14b: unexpected status (https://***.***@artifacts.domain.com/api/go/go-domain/github.com/golang/glog/@v/23def4e6c14b.mod): 404 Not Found
但是在构建失败并报告为未满足模块要求之前,您可能会执行更多成功操作。
因此,如果您的模块从根本上被破坏,则每次可能会获得完全不同的构建日志。这是因为go build
触发获取finding
操作的本质-如果(1)启用了Go模块并且(2)您要搜索的go模块不是 在当前的GOPATH中,您将看到类似以下内容:
jayunit100@k8s-vmware:~/mygoapp# go build
go: finding github.com/jayunit100/blah v1.2.3
go: downloading github.com/jayunit100/blah v1.2.3
也就是说,该模块在构建时被拉低,但是,您可以在下面的日志中看到go go的存储库的获取以不确定的顺序进行(请参见logrus
的下载开始,在此期间开始其他几次下载,然后半秒后,logrus
的提取随后发生。
2019-11-06 11:46:46 gobuilds.Compile : 11:46:46.438 calico_all_build INFO go: downloading github.com/projectcalico/logrus v1.0.4-calico
2019-11-06 11:46:46 gobuilds.Compile : 11:46:46.440 calico_all_build INFO go: downloading github.com/prometheus/client_golang v0.9.1
2019-11-06 11:46:46 gobuilds.Compile : 11:46:46.444 calico_all_build INFO go: downloading github.com/docopt/docopt-go v0.0.0-20160216232012-784ddc588536
2019-11-06 11:46:46 gobuilds.Compile : 11:46:46.454 calico_all_build INFO go: downloading k8s.io/client-go v12.0.0+incompatible
2019-11-06 11:46:46 gobuilds.Compile : 11:46:46.477 calico_all_build INFO go: downloading k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719
2019-11-06 11:46:46 gobuilds.Compile : 11:46:46.504 calico_all_build INFO go: downloading github.com/coreos/go-semver v0.3.0
2019-11-06 11:46:46 gobuilds.Compile : 11:46:46.510 calico_all_build INFO go: extracting github.com/projectcalico/logrus v1.0.4-calico
最终在上述问题中,发生的故障实际上与日志记录中的存储库无关,而与在构建阶段更早就被拉下的存储库相关联。
也就是说,当您发现go模块fetch
和go模块error loading module requirements
紧随其后时,应该查看故障之前的所有日志,以查找错误消息,并且永远不要假设错误报告之前的 last 操作是失败的 actual 操作。
我不知道发生错误后go build最终要花费多长时间才能失败,但是看来确实会发生某些错误,gomodules将继续尝试在一段时间内对各种任务进行更多工作其他并发的查找/获取操作。
TL; DR,go build中包含并发元素,在调试复杂模块请求时要注意这一点。
本文链接:https://www.f2er.com/3158219.html