retract指示符

retract指示符

Content #

从 Go 1.16 版本开始,Go Module 作者还可以在 go.mod 中使用新增加的 retract 指示符,标识出哪些版本是作废的且不推荐使用的。retract 的语法形式如下:

// go.mod
retract v1.0.0           // 作废v1.0.0版本
retract [v1.1.0, v1.2.0] // 作废v1.1.0和v1.2.0两个版本

m1 module 已经演进到v1.0.1版本,某天不小心发布了还处于broken状态的 v1.0.2版本,已经有用户将其拉到proxy缓存中。我们可以将 m1 的 go.mod 更新为如下内容:

//m1的go.mod
module bitbucket.org/bigwhite/m1
go 1.17
retract v1.0.2

然后将 m1 放入 v1.0.3 标签中并发布。现在 m1 的消费者 c2 要查看 m1 是否有最新版本时,可以查看到以下内容(c2 本地环境使用 go1.17 版本):

$GONOPROXY=bitbucket.org/bigwhite/m1 go list -m -u all
... ...
bitbucket.org/bigwhite/m1 v1.0.2 (retracted) [v1.0.3]

从 go list 的输出结果中,我们看到了 v1.0.2 版本上有了 retracted 的提示,提示这个版本已经被 m1 的作者作废了,不应该再使用,应升级为 v1.0.3。

但 retracted 仅仅是一个提示作用,并不影响 go build 的结果,c2 环境(之前在 go.mod 中依赖 m1 的 v1.0.2)下的 go build 不会自动绕过 v1.0.2,除非显式更新到 v1.0.3。

Viewpoint #

From #

加餐|作为Go Module的作者,你应该知道的几件事