1.27

Go 1.27(预计 2026 年 8 月发布) 延续了 1.26 “把痛点都修了"的路线,并在语言表达力和标准库上来了两记重拳:泛型方法终于落地、encoding/json/v2 正式进标准库。如果说 1.26 是"最舒服的小版本”,1.27 就是"标准库开始换代"的版本。

下面按重要程度捋一捋最值得关注的点(基于官方 tip 文档 draft):

语言层面:泛型方法 + 结构体字面量

  • 泛型方法(Generic Methods)
    方法声明现在可以带自己的类型参数了,终于不用为了"类型上的泛型函数"再绕一层包级函数:

    1
    2
    // Go 1.27
    func (s *Stream[T]) Map[U any](f func(T) U) *Stream[U] { ... }

    注意:接口方法不能声明类型参数,也不能被泛型方法实现——这是有意为之的约束,避免 F-bounded 那套复杂度回来。

  • 结构体字面量键放宽
    任何对结构体类型有效的字段选择器都能当字面量的键,不再只限顶层字段名,嵌套初始化更顺手。

  • 函数类型推断泛化
    只要泛型函数被"赋值/转换"到一个匹配的函数类型,类型推断就会自动生效,写回调/适配器少填一堆显式实参。

标准库大事件:JSON v2 + 后量子签名 + UUID

  • encoding/json/v2 正式登场
    全新 API:Marshal / MarshalWrite / MarshalEncodeUnmarshal / UnmarshalRead / UnmarshalDecode,统一接收可变 Options 参数。默认更严格:拒绝非法 UTF-8 字符串和重复 JSON 对象名。配套底层包 encoding/json/v2/jsontext 提供基于 Token/Value 的状态机编解码。
    老的 encoding/json 现在底层跑 v2 实现(行为保留,错误文本可能变),marshal 性能持平、unmarshal 显著更快。想回滚:GOEXPERIMENT=nojsonv2

  • crypto/mldsa:后量子签名方案 ML-DSA(FIPS 204),并已接入 crypto/x509crypto/tls(TLS 1.3 新增 MLDSA44/65/87 签名方案)。

  • uuid:标准库原生支持 UUID 生成与解析,告别第三方依赖。

  • simd / simd/archsimd(实验):可移植、向量长度无关的 SIMD(Int8sFloat32s 等),archsimd 在 1.26 基础上新增 arm64 Neon 与 WebAssembly 128-bit 支持。GOEXPERIMENT=simd 开启。

  • Unicode 升级到 17(从 15 一步跨两级)。

性能与运行时

  • 小对象分配再提速:编译器为 <80 字节分配生成尺寸专用调用,开销最多降 30%,分配密集型程序整体约 +1%(二进制约增大 60 KB;GOEXPERIMENT=nosizespecializedmalloc 关闭)。
  • Goroutine leak profile 转正:1.26 的实验特性正式 GA,经 runtime/pprof/debug/pprof/goroutineleak 暴露,用 GC 可达性分析检测卡在不可达 channel/mutex 上的泄漏。goroutineleakprofile GOEXPERIMENT 删除。
  • Traceback 现在带上 runtime/pprof goroutine 标签(go 1.27+ 模块);asynctimerchan 移除,time 的通道一律无缓冲。

工具链

  • go test 默认跑 stdversion 检查,标出"对当前文件 Go 版本太新"的标准库符号。
  • go doc 支持 package@version 语法,新 -ex 列出可执行示例。
  • go fix 新增 modernizers:atomictypesembedlitslicesbackwardunsafefuncs
  • go mod tidygo 1.27+ 模块)自动合并重复 require 块,强制"直接 + 间接"最多两块。
  • 编译/汇编等工具支持 @file 响应文件;移除 bzr 版本控制支持。

其他值得注意

  • macOS 要求 Ventura(13)及以上(1.26 是最后支持 Monterey 的版本,此处落地)。
  • ppc64/linux 默认改用 ELFv2 ABI。
  • 大量老 GODEBUG(tls10servergotypesalias 等)正式删除,Alias 类型节点现在始终生成。

总结一句话:

Go 1.27 的关键词是"换代"——泛型方法补齐了类型系统最后一块拼图,encoding/json/v2 让 JSON 处理终于现代化,后量子签名和 UUID 也补进了标准库。

日常开发最期待泛型方法 + JSON v2;生产环境受益于小对象分配提速 + goroutine leak profile 转正。

1.26

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

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

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

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

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

    现在一行搞定:

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

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

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

    1
    2
    3
    4
    5
    type Adder[A Adder[A]] interface {
    Add(A) A
    }

    type Tree[T Ordered[T]] struct { ... } // 以前不行,现在可以了

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

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

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

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

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

标准库新增 & 增强

全新包:

  • 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 默认开启后量子密钥交换。

工具链 & 可观测性

  • 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 各状态数量一目了然。

其他值得注意的

  • 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 检测。

想马上尝鲜:

1
2
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)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 泛型函数
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 生态的基石。