问题描述
我正在尝试在 opentelemetry-collector-contrib 项目上运行 go list -mod=readonly -m -u -json all
命令。
它失败并出现以下错误:
$ go list -mod=readonly -m -u -json all
go list -m: loading module retractions for github.com/DataDog/datadog-agent/pkg/trace/exportable@v0.0.0-20201016145401-4646cf596b02: no matching versions for query "latest"
go list -m: loading module retractions for github.com/influxdata/line-protocol/v2@v2.0.0-20210428091617-0567a5134992: no matching versions for query "latest"
$ echo $?
1
我使用的是 go 1.16.5:
$ go version
go version go1.16.5 linux/amd64
我已经用 go clean -modcache
清理了 go 缓存,结果相同。
我找到了两个模块 https://pkg.go.dev/:
似乎 github.com/DataDog/datadog-agent/pkg/trace/exportable 的确切版本存在,但 github.com/influxdata/line-protocol 的版本不存在,但无论如何都报告相同的错误。
我不知道 golang 在这里期望什么以及如何开始对问题进行故障排除。
有人可以帮忙吗?
解决方法
由于在 Go 1.16 的 retract
中引入了 go.mod
指令,这似乎是一个错误 (https://github.com/golang/go/issues/45305)。事实上,如果您省略 -m
标志,该命令运行良好。
如问题线程中所述,您可以添加 -e
标志以在出现错误的情况下继续:
$ go list -mod=readonly -m -u -e -json all
{
"Path": "github.com/open-telemetry/opentelemetry-collector-contrib","Main": true,"Dir": "/Users/me/go/opentelemetry-collector-contrib","GoMod": "/Users/me/go/opentelemetry-collector-contrib/go.mod","GoVersion": "1.16"
}
... much more
关于 -e
标志,go help list
:
-e
标志改变了错误包的处理方式,那些错误包
无法找到或格式错误。 [...]
使用 -e
标志,list 命令永远不会将错误打印到标准
错误,而是用通常的方式处理错误的包
印刷。错误的包将有一个非空的 ImportPath 和
一个非零的 Error 字段;其他信息可能会或可能不会丢失
(归零)。
它应该在 Go 1.17 中得到修复,现在仍处于测试版。