logo

Go 1.26 新特性回顾:语言增强、工具升级与 Green Tea GC 默认启用

作者:陈明勇分类:后端发布:2026/6/23字数:1327阅读:约 4 分钟浏览:4
标签:Go, Go 1.26

扫码关注公众号,手机阅读更方便

程序员陈明勇

前言

Gopher 们,Go 1.26.02026 年 2 月 11 日 正式发布啦!虽然这篇介绍来得稍晚了一些,但 Go 1.26.0 中的不少变化依然值得我们关注。

Go 1.26.0 相比 Go 1.25.0 在语言、工具链、运行时、编译器以及标准库方面都有改进。比如内置函数 new 得到了增强,泛型类型的约束表达能力进一步提升,go fix 命令完成重构,Green Tea GC 也从实验功能变为默认启用。让我们一起来看看 Go 1.26.0 带来了哪些新变化吧!

准备好了吗?准备一杯你最喜欢的咖啡或茶,随着本文一探究竟吧。

快速安装

您可以从下载页面下载二进制和源代码发行版:

Go 1.26.0 下载

如果你已经安装了其他的 Go 语言版本,你也可以通过以下命令快速安装 Go 1.26.0 版本:

$ go install golang.org/dl/go1.26.0@latest
$ go1.26.0 download
Downloaded   0.0% (   xxx / xxxxx bytes) ...
Downloaded  50.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 的加强

Go 1.26 里,new 内置函数不再只能接收类型,现在还可以直接传入一个表达式,用来指定该变量的初始值。

以前我们会这样写:

x := int64(300)
ptr := &x

现在可以简化为:

ptr := new(int64(300))

泛型设计的优化

Go 1.26 放宽了泛型类型的一项限制:在声明泛型类型时,类型参数的约束可以引用这个泛型类型本身。

例如下面的接口:

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 1.26go fix 进行了全面重构,使它从 旧代码修复工具 升级为 代码现代化迁移工具。新的 go fix 内置了数十个代码现代化规则,可以在不改变程序行为的前提下,帮助项目使用更新的语言特性、更推荐的 Go 写法以及新的标准库 API

同时,新的 go fix 基于和 go vet 相同的 Go analysis 框架实现。这意味着,过去用于代码检查和诊断的分析能力,现在也可以进一步用于生成修改建议,并自动应用安全修复。

go mod init

Go 1.26 调整了 go mod init 生成 go.mod 文件时的默认 Go 版本。

如果使用 Go 1.26.0 正式版执行 go mod init,新生成的 go.mod 默认会写入 go1.25.0,也就是比当前工具链低一个版本。

如果希望新模块明确要求 Go 1.26,可以在 go mod init 后执行:

go get go@1.26

或者手动修改 go.mod 中的 go 版本。

cmd/doc

cmd/docgo tool doc 已被删除。可以使用 go doc 替代 go tool doc

Pprof

通过 -http 参数打开 pprof Web UI时,现在默认展示 火焰图 视图。之前的 图视图 可以通过 View -> Graph 菜单访问,也可以通过 /ui/graph 访问。

Runtime 的变更

新的垃圾回收器 Green Tea Garbage

Go 1.25 中作为实验功能提供的 Green Tea 垃圾回收器,现在已默认启用。官方预计,在大量依赖垃圾回收的真实程序中,垃圾回收开销可以降低约 10%40%

更快的 CGO 调用

cgo 调用的基础运行时开销降低了约 30%。

编译器(Compiler)的变更

编译器现在可以在更多场景下将切片的底层存储分配到栈上,从而提升性能。

标准库的变更

新增 crypto/hpke

新增的 crypto/hpke 包实现了 RFC 9180 中定义的 Hybrid Public Key Encryption,也就是混合公钥加密,并包含对后量子混合 KEMz 的支持。

errors

errors 库新增 AsType 函数,它是 As 函数的泛型版本。

log/slog

log/slog 新增了 NewMultiHandler 函数,它会创建一个 MultiHandler,用于管理所给定的多个 Handler

小结

Go 1.26.0 在语言、工具链、运行时、编译器以及标准库方面都有不少改进,并带来了 new 内置函数增强、泛型约束放宽、go fix 重构以及 Green Tea GC 默认启用等重要变化。

此次更新不仅进一步提升了语言表达能力和工具链体验,也在运行时性能方面继续优化,例如降低 GC 开销、减少 cgo 调用成本,并让切片底层存储在更多场景下可以分配到栈上。

无论是日常开发、代码迁移,还是性能优化,Go 1.26.0 都带来了不少实用改进。

后续,我将深入介绍每个重要更新的具体内容,关注我,更多精彩的更新分析,敬请期待!

本文链接:https://chenmingyong.cn/posts/go-1-26-release
版权声明:本文由 陈明勇 原创发布,如需转载请遵循署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)许可协议授权
0
评论
0 / 10
暂无评论