前言
Gopher 朋友们,2026 年 2 月 11 日,Go 1.26.0 版本终于正式发布!尽管这份更新说明比预期来得稍晚,但新版本带来的诸多变化依然值得我们深入探索。
从语言层面内置函数的增强、泛型约束的放宽,到工具链的重构、运行时 GC 的升级,再到标准库的新增功能——此次更新的覆盖面相当广泛。特别是内置函数 new 的强化、go fix 的角色转型,以及 Green Tea GC 从实验性功能到默认配置的转变,都是实实在在的利好。下面直接进入正题,看看具体有哪些值得关注的内容。

快速安装
官方下载页面提供了二进制和源代码发行版:
Go 1.26.0 下载
如果机器上已经安装了其他版本的 Go,使用下面几行命令就能快速切换到新版本:
$ go install golang.org/dl/go1.26.0@latest
$ go1.26.0 download
Downloaded 0.0% ( xxx / xxxxx bytes) ...
Downloaded50.4% ( xxx / xxxxx bytes) ...
Downloaded 100.0% ( xxx / xxxxx bytes)
Unpacking /Users/chenmingyong/sdk/go1.26.0/go1.26.0.darwin-arm64.tar.gz ...
Success. You may now run 'go1.26.0'
$ go1.26.0 version
go version go1.26.0 darwin/arm64
语言的变更
Go 1.26.0 在语言和类型系统方面带来了两项重大改进:new 内置函数的能力扩展,以及泛型约束的进一步灵活化。
内置函数 new 的加强
过去 new 只能接收类型参数,返回指向该类型零值的指针。现在它可以直接接收一个表达式,用表达式的结果作为变量的初始值。举个例子,之前要初始化一个 int64 并取指针,需要这样写:
x := int64(300)
ptr := &x
现在一行就能搞定:
ptr := new(int64(300))
这种写法在需要快速创建带特定初始值的指针变量时非常方便,特别是配合结构体或复合类型使用时,能省去不少临时变量,代码更加简洁。
泛型设计的优化
另一个让泛型爱好者兴奋的改进是:类型参数的约束现在可以引用自身所在的泛型类型了。例如下面这个自引用的接口定义:
type Adder[A Adder[A]] interface {
Add(A) A
}
func algo[A Adder[A]](x, y A) A {
return x.Add(y)
}
在 Go 1.26 之前,type Adder[A Adder[A]] 这种写法是不合法的——你在定义 Adder 自己的类型参数列表时,还不能在约束里引用 Adder[A] 本身。现在这个限制被去掉了,许多递归式的泛型模式终于可以自然地表达出来。
工具链的变更
Go command 命令
go fix
过去的 go fix 更像是一个历史遗留兼容工具,主要用于把旧代码迁移到 Go 标准库的早期变化上。但自从 Go 1 兼容性承诺稳定之后,这类修复规则逐渐失去了用武之地,go fix 慢慢沦为一个不太常用的命令。
Go 1.26 对 go fix 做了一次彻底的重构,把它从“旧代码修复工具”升级成了“代码现代化迁移工具”。新版本内置了数十条代码现代化规则,能够在保证程序行为不变的前提下,自动将项目切换到更现代的语言特性、更推荐的写法以及新的标准库 API。比如把旧版 io/ioutil 的调用改成 io 或 os 包的新方式,或者自动应用新的切片表达式等。
更重要的是,新的 go fix 与 go vet 共享同一个 Go analysis 框架。这意味着之前只用于检查诊断的分析能力,现在可以直接生成修改建议并自动应用安全修复——实操价值很高。
go mod init
go mod init 生成 go.mod 文件时,默认写入的 go 版本号有了变化。用 Go 1.26.0 正式版执行 go mod init,新生成的 go.mod 里默认是 go 1.25.0,也就是比当前工具链低一个主版本。如果你希望新模块明确要求 Go 1.26,可以手动执行:
go get go@1.26
或者直接编辑 go.mod 中的 go 版本号。这个调整主要是为了给模块作者更多缓冲空间,避免新模块过早绑定最新版本导致兼容性问题。
cmd/doc
cmd/doc 和 go tool doc 已经被移除。需要查看文档的话,直接使用 go doc 命令替代即可。
pprof
通过 -http 参数启动 pprof Web UI 时,默认展示的视图变成了火焰图。此前默认的图视图(Graph)仍然可以通过菜单 View → Graph 或者直接访问 /ui/graph 路径来查看。火焰图在分析性能热点时更加直观,这个默认变动很实用。
Runtime 的变更
新的垃圾回收器 Green Tea GC
Go 1.25 中以实验特性引入的 Green Tea 垃圾回收器,现在已成为默认选项。官方给出的预估是:在大量依赖 GC 的真实程序场景中,垃圾回收的开销可以降低约 10% 到 40%。这意味着不少服务在升级后,CPU 和延迟表现可能会有明显改善——尤其是那些对象分配频繁、GC 压力大的应用。
更快的 CGO 调用
cgo 调用的基础运行时开销降低了约 30%。对于需要频繁跨语言调用的项目来说,这个优化能节省不少时间。
编译器(Compiler)的变更
编译器现在能够在更多场景下将切片的底层存储分配到栈上,而不是堆上。这直接减少了逃逸分析失败导致的堆分配,进而降低 GC 压力,提升局部性。对于短生命周期的小切片,这个变化带来的性能收益尤其明显。
标准库的变更
新增 crypto/hpke 包
新包实现了 RFC 9180 中定义的混合公钥加密(HPKE),并包含对后量子混合 KEM 的支持。在加密通信场景中,HPKE 提供了一种比传统方案更简洁、更高效的密钥封装方式,值得关注加密技术的同学深入了解。
errors
errors 包新增了 AsType 函数,是 As 的泛型版本。有了它,错误类型断言可以直接写成泛型调用,省去手动类型断言的样板代码。
log/slog
log/slog 新增了 NewMultiHandler 函数,用来创建一个 MultiHandler,可以同时将日志分发到多个 Handler。这在需要同时输出到文件和控制台,或者按不同格式路由到不同目的地的场景中非常实用。
小结
Go 1.26.0 这次更新,从语言能力、工具链体验到运行时性能,覆盖了日常开发的多个关键方面。new 的增强和泛型约束放宽让表达更灵活,go fix 的升级让代码迁移变得更智能,Green Tea GC 的默认启用和 cgo 调用的优化则在性能层面带来了实实在在的收益。
无论是准备升级现有项目,还是评估新版本带来的迁移成本与收益,这次更新都提供了不少值得投入时间研究的改进点。
