Go Wiki:标准库和工具链风险变更指南
在处理风险变更时,请务必格外小心。在此提醒:
如果一项变更可能导致难以诊断的故障(例如,对运行时、GC、编译器、链接器、TLS、其他底层组件的变更,或需要生产负载下长时间运行才能发现的复杂变更),或者如果该变更需要大量的、难以回滚的 CL(例如,大型 CL 或一系列 CL),那么该变更就是有风险的。
如果您计划进行一项可能有风险的变更,请按以下步骤操作:
- 除非整个变更都绝对微不足道,否则请使用一个以
go126
为前缀的布尔标志来保护新的代码路径,该标志可用于快速切换回旧的实现。它可以是一个简单的布尔常量,例如const go126UseEvenBetterLinker = true
。此类标志必须能够通过简单地 grep 字符串go126
来找到。这样我们就可以找到它们,而不会遗漏任何一个,并且可以在 Go 1.27 周期来临时清理它们。 - 考虑您将如何回答有关您变更的以下问题:
- 您计划进行的变更有多大的风险?
- 您将如何知道它是否按预期工作?
- 您需要多少生产测试才能确信它按预期工作?
- 应该何时做出保留/回滚的决定?
- 在 Go 1.26 里程碑中创建一个跟踪问题,并添加 release-blocker 标签。此问题将用于跟踪该功能的进展,并为 Go 1.26 做出最终决定。
此内容是 Go Wiki 的一部分。