如何在go.mod中检测依赖项的来源

时间:2019-05-08 01:59:26

标签: go go-modules

我正在尝试将https://github.com/appscode/voyager从滑行转换为mod。

我收到如下错误:

go: github.com/Sirupsen/logrus@v1.4.1: parsing go.mod: unexpected module path "github.com/sirupsen/logrus"
go: error loading module requirements

我如何找到这个Sirupsen旧模块的来源?

1 个答案:

答案 0 :(得分:4)

  

我如何找到这个Sirupsen旧模块的来源?

使用Go 1.13 Beta(go get golang.org/dl/go1.13beta1 && go1.13beta1 download)或什至更好,请尝试使用最新的Go on Tip / master(go get golang.org/dl/gotip && gotip download)。

Go 1.13总体上改进了错误消息。它可以为您提供帮助,包括最有可能显示导致错误的导入链。

例如:

$ gotip build .
go: example.com/temp/mod imports
        github.com/docker/libcompose/docker imports
        github.com/Sirupsen/logrus: github.com/Sirupsen/logrus@v1.4.2: parsing go.mod:
        module declares its path as: github.com/Sirupsen/logrus
                but was required as: github.com/sirupsen/logrus

在该示例中,您可以看到docker/libcompose/docker正在导入旧的且现在不正确的大写版本的Sirupsen/logrus

人们看到Sirupsen/logrussirupsen/logrus大小写不匹配的最常见原因是在导入github.com/docker/docker或其他Docker存储库之一时。导入docker repos与模块有些混淆,其中包括:

  • docker/docker回购没有紧随其后。
  • v1.13.1存储库中有一个非常旧的docker/docker semver标签。
    • 即使已经使用了几年,它仍然是该存储库上的“最新” semver标签,因此,如果您不要求使用旧版本,则go命令会默认使用该旧版本更具体的版本。
    • 该旧docker/docker版本会导入旧的且不正确的大写字母Sirupsen/logrus,然后这会触发上述问题中报告的错误。
  • docker客户端软件包在v1.13.1之后发生了重大变化。
  • 对于docker/dockerdocker/engine存储库以及要使用的导入路径,通常存在混淆。
  • docker仓库没有go.mod文件。

对于docker/docker存储库,导入路径仍为github.com/docker/docker,但它必须来自github.com/docker/engine,因此推荐的方法通常是让Docker进口商使用{{1} }并将其import "github.com/docker/docker"修改为以下内容:

go.mod

Docker问题#39302跟踪了如何记录使用模块时如何导入docker仓库的记录。