Golang Versions
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"}) // *UserJSON、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/archsimd(GOEXPERIMENT=simd):amd64 SIMD 向量运算(Int8x16、Float64x8 等),高性能计算党狂喜。runtime/secret(GOEXPERIMENT=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/doc、go tool doc删了)。pprof默认显示 flame graph(火焰图)。- 实验性 goroutine leak profile(
GOEXPERIMENT=goroutineleakprofile):能自动检测“goroutine 卡在 unreachable channel/mutex 上”的泄漏,神器! - 新调度指标
/sched/,goroutine 各状态数量一目了然。
5. 其他值得注意的
- Bootstrap 要求 Go 1.24.6+。
- macOS 12 Monterey 是最后支持版本,下个版本起要求 Ventura。
- Windows 32-bit ARM 端口被移除。
- 很多老 GODEBUG 标志在 1.27 会彻底删除(比如
tls10server、gotypesalias等),建议现在就升级测试。
总结一句话:
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 月发布) 继续完善语言细节,引入了一些实用的新特性。
核心特性
omitzerotag 选项:JSON 序列化时调用IsZero()方法判断是否省略,解决time.Time等类型的痛点。range over func:实验性特性,允许自定义迭代器。std/atomic包重构:更清晰的原子操作 API。crypto/mlkem:后量子加密算法支持。
性能改进
- GC 暂停时间进一步降低。
- 编译速度提升约 5%。
1.23
Go 1.23(2024 年 8 月发布) 是一个相对较小的版本,主要聚焦于工具链和标准库改进。
核心特性
range循环变量语义变更:每个迭代使用独立变量(解决闭包捕获问题)。iter包:标准迭代器接口。slices和maps包新增函数:更多泛型工具函数。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 月发布) 是一个重要的工具链和性能改进版本。
核心特性
slices和maps包:泛型工具函数进入标准库。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.Int64、atomic.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 生态的基石。

