1.26

Go 1.26(2026 年 2 月 10 日发布) 是 Go 历史上改动范围最广的一次小版本更新之一!虽然没有像 1.18 泛型那样“颠覆性”,但它在语言体验、性能、工具链和标准库四个维度都做了大量实打实的改进,被很多人称为“史上最舒服的小版本”。

下面我按重要程度给你捋一捋最值得关注的点(基于官方 release notes + blog):

1. 语言层面两处“真香”改动(最实用)

  • new(expr) 终于支持表达式了!
    以前想创建一个带初始值的指针超级麻烦:

    // Go 1.25 及以前
    age := yearsSince(born)
    p := &age

    现在一行搞定:

    // Go 1.26
    Age: new(yearsSince(born)),   // *int
    // 或者更爽的
    p := new(42)                  // *int,指向 42
    q := new(User{Name: "Hao"})   // *User

    JSON、Protobuf、配置结构体、optional 参数场景直接起飞,少写一堆临时变量。

  • 泛型类型可以自引用了
    以前写递归泛型(树、链表、状态机)经常卡壳,现在可以:

    type Adder[A Adder[A]] interface {
        Add(A) A
    }
    
    type Tree[T Ordered[T]] struct { ... }  // 以前不行,现在可以了

2. 性能大提升(生产环境直接受益)

  • Green Tea GC 默认开启(1.25 实验性)

    • 小对象扫描更聪明,局部性更好,多核可扩展性大幅提升。
    • 实际项目 GC 开销平均降 10~40%,amd64 新 CPU 上还能再多 10%(用了向量指令)。
    • 想回滚:GOEXPERIMENT=nogreenteagc(下个版本会删)。
  • cgo 调用 baseline 开销降 ~30%

    • 对大量调用 C 库的项目(数据库驱动、FFI 等)是巨大福音。
  • 小对象(1~512 字节)分配路径专门优化,快很多。

  • 堆基址随机化(64 位平台默认开启),安全性提升,防内存预测攻击。

3. 标准库新增 & 增强

全新包:

  • crypto/hpke:实现 RFC 9180 的混合公钥加密(HPKE),支持后量子混合 KEM。
  • 实验包
    • simd/archsimdGOEXPERIMENT=simd):amd64 SIMD 向量运算(Int8x16、Float64x8 等),高性能计算党狂喜。
    • runtime/secretGOEXPERIMENT=runtimesecret):秘密处理模式,函数退出时自动擦除寄存器/栈/堆,密码学前向保密神器。

其他实用更新:

  • errors.AsType[*MyErr](err):类型安全的泛型版 errors.As,更快、更爽。
  • slog.NewMultiHandler:原生支持日志扇出(同时写文件 + stdout + remote)。
  • io.ReadAll:内存少一半、速度翻倍。
  • bytes.Buffer.Peek(n):不移动读指针看前 n 个字节。
  • reflect 新增迭代器:Type.Fields()Value.Methods() 等,遍历字段超方便。
  • 加密库大升级:随机源默认用系统安全随机(不再传 rand.Reader),ML-KEM 快 18%,TLS 默认开启后量子密钥交换。

4. 工具链 & 可观测性

  • go fix 重写,用 go/analysis 框架实现,支持 //go:fix inline 自动内联,现代化的 fixer 更多。
  • go doc 统一入口(老的 cmd/docgo tool doc 删了)。
  • pprof 默认显示 flame graph(火焰图)。
  • 实验性 goroutine leak profileGOEXPERIMENT=goroutineleakprofile):能自动检测“goroutine 卡在 unreachable channel/mutex 上”的泄漏,神器!
  • 新调度指标 /sched/,goroutine 各状态数量一目了然。

5. 其他值得注意的

  • Bootstrap 要求 Go 1.24.6+。
  • macOS 12 Monterey 是最后支持版本,下个版本起要求 Ventura。
  • Windows 32-bit ARM 端口被移除。
  • 很多老 GODEBUG 标志在 1.27 会彻底删除(比如 tls10servergotypesalias 等),建议现在就升级测试。

总结一句话:

Go 1.26 不是“哇塞新语法”,而是“终于把所有让人烦的小痛点都修了,还顺便把性能拉满”

日常开发最爽的是 new(expr) + errors.AsType + slog.MultiHandler;生产环境最爽的是 Green Tea GC + cgo 提速 + goroutine leak 检测。

想马上尝鲜:

go install golang.org/dl/go1.26@latest
go1.26 download

升级后跑一遍 go fix ./...go test -race ./... 基本就稳了。

1.25

Go 1.25(2025 年 8 月发布) 是一个承上启下的版本,为 1.26 的很多特性打下了基础。

核心特性

  • 实验性 Green Tea GC:新一代垃圾回收器,更好的小对象局部性和多核扩展性。
  • context.AfterFunc:在 context 取消后执行回调函数。
  • slog 包稳定:结构化日志成为标准。
  • net/http 性能改进:HTTP/2 和 TLS 握手优化。
  • testing 包增强:支持 T.Cleanup 在 goroutine 中使用。

废弃和移除

  • 移除对 Windows 7/8 的支持。
  • 移除多个过时的加密算法。

1.24

Go 1.24(2025 年 2 月发布) 继续完善语言细节,引入了一些实用的新特性。

核心特性

  • omitzero tag 选项:JSON 序列化时调用 IsZero() 方法判断是否省略,解决 time.Time 等类型的痛点。
  • range over func:实验性特性,允许自定义迭代器。
  • std/atomic 包重构:更清晰的原子操作 API。
  • crypto/mlkem:后量子加密算法支持。

性能改进

  • GC 暂停时间进一步降低。
  • 编译速度提升约 5%。

1.23

Go 1.23(2024 年 8 月发布) 是一个相对较小的版本,主要聚焦于工具链和标准库改进。

核心特性

  • range 循环变量语义变更:每个迭代使用独立变量(解决闭包捕获问题)。
  • iter:标准迭代器接口。
  • slicesmaps 包新增函数:更多泛型工具函数。
  • go test -failfast 改进:更灵活的失败处理。

工具链

  • go mod 性能优化。
  • pprof 支持更多指标。

1.22

Go 1.22(2024 年 2 月发布) 带来了语言层面的重要改进。

核心特性

  • for 循环语义修复:循环变量在每次迭代中重新绑定(解决经典的闭包陷阱)。
  • range 表达式支持整数for i := range 5 等价于 for i := 0; i < 5; i++
  • slices.Sorted 等泛型函数:标准库泛型化继续推进。
  • net/http 路由改进ServeMux 支持更多匹配模式。

性能

  • GC 效率提升,特别是大堆场景。
  • 编译速度优化。

1.21

Go 1.21(2023 年 8 月发布) 是一个重要的工具链和性能改进版本。

核心特性

  • slicesmaps:泛型工具函数进入标准库。
  • cmp:通用的比较函数。
  • log/slog:结构化日志实验性引入。
  • GOEXPERIMENT 机制:允许用户提前体验实验性特性。

性能

  • 运行时性能提升 10-15%。
  • GC 改进,减少暂停时间。

工具链

  • go test 支持 -shuffle 随机测试顺序。
  • go vet 新增检查项。

1.20

Go 1.20(2023 年 2 月发布) 是一个以性能和改进为主的版本。

核心特性

  • any 成为预声明类型:等价于 interface{}
  • unsafe 包重构:更安全的内存操作 API。
  • context 包新增 WithCancelCause:支持带原因的取消。
  • errors.Unwrap 支持返回多个 error

性能

  • 编译器优化,二进制体积减小。
  • GC 改进,特别是并发标记阶段。

废弃

  • 移除对 Windows 7/8 的部分支持预告。

1.19

Go 1.19(2022 年 8 月发布) 是泛型后的第一个重要版本。

核心特性

  • atomic 类型支持泛型atomic.Int64atomic.Pointer[T] 等。
  • sync/atomic 包重构:更清晰的原子操作 API。
  • testing 包支持 F.Fuzz:模糊测试进入稳定版。
  • runtime.MemStats 改进:更准确的内存统计。

文档

  • 语言规范明确内存模型。
  • 泛型使用指南完善。

1.18

Go 1.18(2022 年 3 月发布) 是 Go 历史上最具革命性的版本之一!

核心特性:泛型(Generics)

// 泛型函数
func Map[T, U any](s []T, f func(T) U) []U {
    result := make([]U, len(s))
    for i, v := range s {
        result[i] = f(v)
    }
    return result
}

// 泛型类型
type Stack[T any] struct {
    items []T
}

func (s *Stack[T]) Push(v T) {
    s.items = append(s.items, v)
}

其他特性

  • constraints:预定义泛型约束。
  • net/netip:更高效的 IP 地址处理。
  • testing 包支持 Fuzzing:模糊测试实验性引入。
  • go work 工作区:多模块开发更方便。

性能

  • 编译速度提升。
  • 运行时性能改进。

影响

泛型的引入彻底改变了 Go 的编程范式,让代码复用和类型安全达到了新高度。虽然初期有争议,但很快成为 Go 生态的基石。