Go 1.27 今天正式发布。这个版本最大的亮点是泛型方法(Generic Methods)——期待已久的语言特性终于落地。
泛型方法允许方法声明自己的类型参数,这意味着你可以为特定类型的方法添加泛型约束而不影响整个类型。不过接口方法不能声明类型参数,泛型方法也不能满足接口方法的要求。
标准库方面,改动最大的当属 encoding/json/v2。新版 JSON 包默认更严格:拒绝无效的 UTF-8、拒绝 JSON 对象中的重复键名。最重要的是,原来的 encoding/json 底层已经切换到了 v2 实现,unmarshal 性能显著提升。如果你需要旧行为,可以设置 GOEXPERIMENT=nojsonv2 回退。
另一个让人意外的变化是 uuid 被纳入了标准库。开发者终于不用再为 UUID 生成引入第三方依赖了。同样新增的 crypto/mldsa 包实现了后量子签名方案 ML-DSA(FIPS 204),crypto/x509 和 crypto/tls 都已经支持。
实验性 SIMD 支持也值得关注。新的 simd 包提供了跨架构的 SIMD 抽象,通过 GOEXPERIMENT=simd 启用。simd/archsimd 子包支持 arm64 Neon 和 WebAssembly 128 位 SIMD。
运行时方面,小对象内存分配(80 字节以下)成本降低了最多 30%——这对高频分配场景是个实打实的提升。Goroutine 泄漏检测(goroutineleak 分析器)从实验性功能正式毕业,利用 GC 可达性分析来检测无法被唤醒的阻塞 goroutine。
工具链也有一些顺手的小改进:go test 默认启用 stdversion vet 检查,防止引用比模块版本声明更晚的标准库符号;go mod tidy 自动合并重复的 require 块;go doc 支持 package@version 语法。
参考来源: