Go 1.25 发布 — DWARF5、严格的 nil 检查语义、jsonv2 实验和工具链变更

Go工具后端

关键更新

Go 1.25(于 2025 年 8 月 12 日发布)是一个实用的、影响开发者的版本,而不仅仅是一个纯粹的增量更新。该版本引入了 DWARF-5 调试输出和链接器选项,减少了大型程序的二进制大小和链接时间,修复了一个长期存在的编译器错误,现在强制执行符合规范的 nil 指针检查(这可能导致之前运行但不正确的代码崩溃),毕业了 synctest 并发测试支持,并在 GOEXPERIMENT=jsonv2 后面暴露了一个实验性的高性能 encoding/json/v2 实现。工具链还更改了一些默认设置:AddressSanitizer 现在默认在程序退出时进行泄漏检测,go 命令将构建更少的预构建辅助二进制文件,并且新的 vet 分析器(例如 waitgroup 和 hostport)可以捕捉常见的并发和网络错误。

重要性

nil 指针修复是风险最高的现实世界变更:错误地使用在检查错误之前生成的值的代码现在可能会崩溃;这需要在 Go 1.25 下运行你的测试套件和 CI,以发现回归并修复它们(提前移动错误检查或重构)。DWARF-5 和链接器选项实质上加快了调试构建的速度,并减少了大型服务和单一代码库的符号大小,从而改善了开发者迭代时间和 CI 成本。jsonv2 实验在许多工作负载中提供了显著更快的解码;在 JSON 密集型服务的暂存环境中尝试是值得的,因为行为略有不同,错误文本可能会改变。ASAN 泄漏检测的默认设置可能会破坏依赖于 C 分配未被释放的测试;如有必要,请在 CI 中调整 ASAN_OPTIONS。新的 vet 分析器和 synctest 使得更早捕捉并发错误变得更加容易。可操作步骤:在 CI 中固定工具链,在 Go 1.25 下运行完整的测试套件(并在受控环境中尝试 GOEXPERIMENT=jsonv2),启用新的 vet 分析器,并审计依赖于 len/cap 黑客、unsafe.Pointer 模式或延迟错误检查的代码。

来源

继续阅读