Go 1.26 发布:new(expr)、Green Tea GC 默认开启与 go fix 重写
Go 1.26 于 2026-02-10 发布,作者 Carlos Amedee。发布说明:https://go.dev/doc/go1.26;发布博客:go.dev/blog/go1.26。
语言变化
内置 new 函数现在允许操作数是表达式,用来指定变量初始值。原先需要先声明变量再取地址:
x := int64(300)
ptr := &x
Go 1.26 可以写成:
ptr := new(int64(300))
泛型类型现在可以在自己的类型参数列表中引用自身,即自引用泛型约束。
性能
- 此前实验性的 Green Tea 垃圾回收器现在默认启用。
- cgo 基线开销降低约 30%。
- 编译器在更多情况下把 slice 的底层数组分配到栈上。
工具
go fix 命令被完全重写,使用 Go analysis 框架,包含约两打 “modernizers” 分析器。它还包含 inline 分析器,会内联所有标注了 //go:fix inline 指令的函数调用。
go mod init 现在在新 go.mod 里默认写更低的 go 版本:用 1.N.X 工具链运行 go mod init 会生成 go 1.(N-1).0;预发布版本 1.N 会生成 go 1.(N-2).0。例如 Go 1.26 RC 生成 go 1.24.0,正式版生成 go 1.25.0。
新包与实验特性
新包
crypto/hpkecrypto/mlkem/mlkemtesttesting/cryptotest
pprof web UI(-http)现在默认展示火焰图;旧的图形视图在 View -> Graph 或 /ui/graph。
实验特性
以下特性需要 GOEXPERIMENT 显式开启:
simd/archsimd:提供 SIMD 操作,目前仅 amd64,支持 128/256/512-bit 向量类型如Int8x16、Float64x8,API 尚不稳定。runtime/secret:提供安全擦除敏感临时数据的能力,目前支持 Linux 上的 amd64 和 arm64。runtime/pprof新增goroutineleakprofile,报告泄漏的 goroutine。用GOEXPERIMENT=goroutineleakprofile构建时开启,也暴露/debug/pprof/goroutineleak端点,计划 Go 1.27 默认启用。判定逻辑是:若一个 goroutine 阻塞在并发原语上,且该原语从任何可运行的 goroutine 都不可达,就判定为泄漏。
兼容性与破坏性变更
- 32-bit
windows/arm端口移除。 - bootstrap 需要 Go 1.24.6+。
cmd/doc/go tool doc删除,改用go doc。- 历史
go fixfixers 移除。 - JPEG 编解码器输出可能与旧版逐位不同。
net/url.Parse现在拒绝形如http://localhost:80:80/的 URL;可用GODEBUG=urlstrictcolons=0恢复旧行为。net/http.ServeMux尾斜杠重定向从 301 改为 307。- 弃用:
net/http/httputil.ReverseProxy.Director弃用,改用Rewrite;crypto/ecdsa、crypto/rsa的 PKCS#1 v1.5 加密相关字段/方法弃用。