Go 1.26 新增内容

Go 1.26 于 2026 年 2 月发布,核心变化集中在语言层两个便利性改进、Green Tea GC 转正,以及go fix 全面重写。下面按实用程度梳理。


一、new 函数支持表达式初始值

以前给指针一个初始值需要两步,现在一步完成:

// 旧写法
x := int64(300)
ptr := &x

// Go 1.26
ptr := new(int64(300))

对序列化场景中给可选字段赋指针尤其方便,少写一行中间变量。

二、泛型类型允许自引用

泛型类型现在可以在自己的类型参数列表中引用自身,能表达递归约束:

type Adder[A Adder[A]] interface {
    Add(A) A
}

这让复杂数据结构(如递归接口、自约束泛型)的实现更直接。日常业务代码用得不多,但写库或框架时会遇到。

三、Green Tea GC 默认启用

1.25 的实验特性转正,成为默认垃圾回收器。官方数据:真实程序 GC 开销降低约 10%–40%,新 AMD64 平台(Intel Ice Lake / AMD Zen 4 及以后)利用向量指令还能再降约 10%。可以用 GOEXPERIMENT=nogreenteagc 临时关闭,但这个选项 1.27 会移除。

四、go fix 重写为现代化工具

不再只是修复旧代码兼容问题,而是基于 go vet 的分析框架,内置数十个“现代化器”,帮你把代码自动改成新写法。还新增了 //go:fix inline 指令,可以把标注过的函数调用内联。升级后值得跑一遍 go fix ./... 看看有什么建议。

五、性能与运行时

  • cgo 开销降低约 30%:Go 与 C 频繁互调的场景受益明显。
  • 切片栈分配优化:编译器在更多情况下把切片底层数组放栈上,减少堆分配。
  • 堆基址随机化:64 位平台启动时随机化堆地址,提升安全性。

六、实验特性(需显式开启)

  • simd/archsimd:SIMD 指令访问(目前 amd64),GOEXPERIMENT=simd。
  • runtime/secret:安全擦除敏感临时数据,面向密码学场景。
  • goroutineleak profile:检测永久阻塞的 goroutine,GOEXPERIMENT=goroutineleakprofile。1.27 计划默认启用。

七、标准库小更新

  • 新增 crypto/hpke(RFC 9180 混合公钥加密)。
  • errors.AsType:As 的泛型版本,类型安全且更快。
  • io.ReadAll 更快、内存更省。
  • image/jpeg 编解码器替换为更快实现,但不保证输出逐位一致,依赖精确输出的测试需要留意。
  • go mod init 新模块默认 go 版本比工具链低一个小版本(如 Go 1.26 创建 go 1.25.0),鼓励模块兼容性。

升级建议

改 go.mod 到 go 1.26 即可,绝大多数代码无需修改。最值得做的三件事:跑一遍 go fix ./... 看代码现代化建议;如果有 cgo 调用,感受一下性能提升;写并发代码时开启 goroutineleakprofile 排查泄漏。

posted @ 2026-11-01 21:31  sunlon  阅读(9)  评论(0)    收藏  举报