Go 1.25 发布:GOMAXPROCS 默认容器感知,json/v2 与 GC 进入实验
Go 1.25 发布于 2025-08-12。下面按主题记录值得关注的变化点。
语言与规范
语言层面没有影响现有程序的变化。规范中移除了 core types 概念。
容器感知的 GOMAXPROCS
Linux 上默认参考 cgroup CPU 带宽限制(cpu.cfs_quota_us / cpu.cfs_period_us)计算并行度,并周期性(约 10s)更新。取值取逻辑 CPU 数、CPU 亲和性、cgroup 配额三者中的最小值。
GODEBUG=containermaxprocs=0 # 关闭容器感知
GODEBUG=updatemaxprocs=0 # 关闭周期性更新
新增 runtime.SetDefaultGOMAXPROCS。
GC:greenteagc
新增实验性 GC,通过 GOEXPERIMENT=greenteagc 启用。针对小对象密集的应用,目标是降低约 40% 的 GC 开销。
encoding/json/v2
进入实验阶段,用 GOEXPERIMENT=jsonv2 启用,新增 encoding/json/v2 与 encoding/json/jsontext 两个包。启用后原 encoding/json 也切到新实现,marshal/unmarshal 语义保持,但错误消息文本可能变化。新选项包括 OmitZeroStructFields、MatchCaseInsensitiveNames。
testing/synctest 转正
从 1.24 的实验包转为正式包。它在隔离 bubble 内用虚拟时钟测试并发代码,可以在不真实等待的情况下测试超时。旧实验 API 在 GOEXPERIMENT=synctest 下仍可用,将在 1.26 移除。
sync.WaitGroup.Go
sync.WaitGroup 新增 Go 方法:自动完成 Add/Done,避免忘记调用导致的并发错误。
Flight Recorder
runtime/trace 新增 Flight Recorder API:在内存中维护环形缓冲,出错时把最近一段 trace 快照写入文件,便于生产排障。
工具链与平台
编译器/链接器默认生成 DWARF 5 调试信息,减小二进制体积、加快链接;可用 GOEXPERIMENT=nodwarf5 关闭。修复了 1.21—1.24 中可能导致 nil 指针检查被错误延迟的编译器 bug。
平台方面:要求 macOS 12 Monterey 或更高;windows/arm 32 位端口将在 1.26 移除;GOAMD64=v3 及以上启用 FMA 指令。
小版本安全修复
- go1.25.1:修复
net/http安全问题 - go1.25.2:大范围安全修复,涉及
archive/tar、crypto/tls、crypto/x509、encoding/asn1、encoding/pem、net/http、net/mail、net/url等 - go1.25.3:修复
crypto/x509 - go1.25.6:修复 go 命令、
archive/zip、crypto/tls、net/url - go1.25.8:修复
html/template、net/url、os - go1.25.9:修复 go 命令、compiler、
archive/tar、crypto/tls、crypto/x509、html/template、os - go1.25.10:修复 go 命令、pack、
html/template、net、net/http、syscall
参考:Go 1.25 发布说明、发布历史