安装 go 模块失败并显示 `invalid: module contains a go.mod file, so major version must be compatible`

Ben*_*two 10 go jenkins-x

我正在尝试从 Jenkins-X/jx 导入以自定义一些东西。

我真的很新来抬头

但试图go get ./...失败。

我的 go.mod 文件

module github.com/my-org/my-project

go 1.13

require github.com/jenkins-x/jx v2.0.383
Run Code Online (Sandbox Code Playgroud)

我得到

... require github.com/jenkins-x/jx: version "v2.0.383" invalid: module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v2
Run Code Online (Sandbox Code Playgroud)

这是因为 jx 在它的 mod 文件中有一些要求

但我不确定要实际下载模块我必须做什么。

dav*_*iod 3

在Go中,大版本冲突必须确保导入路径与其他大版本不同。版本v1不需要任何后缀,所有后续的主要版本升级都必须在模块名称中包含主要版本后缀。在你的情况下应该是:

require github.com/jenkins-x/jx/v2 v2.0.383
Run Code Online (Sandbox Code Playgroud)

然后在 go 源文件中使用的导入路径也应该指定这一点。您可以在此处获取有关此约定的更多信息https://github.com/golang/go/wiki/Modules#why-must-major-version-numbers-appear-in-import-paths

但一些模块作者不遵循此规则,这与 go 工具的预期不兼容。如果您对模块具有写访问权限,则应修复模块名称,以便主要版本出现在模块定义中。

对于这个特定的包,所有主要版本都没有在模块名称上添加所需的后缀。我想因为它是一个 CLI 工具,所以它不应该被其他模块使用。无论如何,如果您需要导入它,您可以通过指定与您想要依赖的标签相对应的提交 id 来解决:

go get github.com/jenkins-x/jx@c71c08508888ec
Run Code Online (Sandbox Code Playgroud)

但是您可能会遇到其他问题,因为该模块似乎不希望被其他模块消耗。

而且您也将自行升级此软件包,go 工具将无法升级版本本身,因为它不知道当前版本。