如何使用go.mod强制使用特定的软件包版本?

问题描述

在我的go.mod中,我有:

...
require (
  ...
  sigs.k8s.io/controller-runtime v0.2.0-alpha.0
) 

出于某种原因,当我保存文件时,我的go.sum被更新为包括:

sigs.k8s.io/controller-runtime v0.2.0-alpha.0 h1:WM6lus3SNU4SsMlDYvjJ5fyLsG9nW3ffb/4/FpE2ZGrtnc=
sigs.k8s.io/controller-runtime v0.2.0-alpha.0/go.mod h1:HFAsYoOh6XMV+jKF1rsUjFwrknPbowfyHEHH5fRdJMf2jMX8=
sigs.k8s.io/controller-runtime v0.6.3 h1:SBbr+inLPEKhrf87vlJtrvDcwIpm+uhDvp63Bl72xYJtoOE=
sigs.k8s.io/controller-runtime v0.6.3/go.mod h1:WlZNXcMs40++oyaQt4B7Cs2lEE5JYRs8vJUznj4aRP4N4JpdAY=

第2个,我知道它们为什么会在那里。但是,为什么软件包的最新版本(0.6.3)也会突然出现?

运行go mod tidy时,出现错误提示我的代码库中有2个文件指向该软件包的最新版本(0.6.3)。我该怎么做才能在我的代码库中的go模块+中严格使用0.2.2版本?

go mod tidy

<filename here> imports
    sigs.k8s.io/controller-runtime/pkg/webhook/admission/builder: module sigs.k8s.io/controller-runtime@latest found (v0.6.3),but does not contain package sigs.k8s.io/controller-runtime/pkg/webhook/admission/builder

解决方法

v0.2.0-alpha.0 似乎已经是你的模块正在使用的版本,所以你不需要做任何事情来“强制”它。 (您使用的 go 命令版本可能会在出错之前错误地保存 go.sum 文件。如果使用最新版本重现 - 当前为 go1.16rc1 - 请提交问题,包含重现它的步骤,位于 https://golang.org/issue/new .)

错误消息告诉您 go 命令正在寻找丢失的包 (sigs.k8s.io/controller-runtime/pkg/webhook/admission/builder)。

它正在检查可能包含该包的模块的最新版本,但最新版本(即 v0.6.3,而您的模块需要 v0.2.0-alpha.0)仍然不包含该包。

因此,go 命令本质上是在告诉您:“我缺少软件包 sigs.k8s.io/controller-runtime/pkg/webhook/admission/builder,我无法通过升级来修复它,因为 v0.6.3 也不包含该软件包”。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...