Go 1.27 发布 - Go 编程语言

Lobsters Hottest 工具

摘要

Go 1.27 已发布,包含重大增强,如泛型方法、性能改进以及新标准库特性,例如 encoding/json/v2 和后量子密码学支持。

<p><a href="https://lobste.rs/s/smrw3n/go_1_27_is_released_go_programming">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/08/19 18:34

# Go 1.27 正式发布 - Go 编程语言 来源:https://go.dev/blog/go1.27 ## Go 官方博客 (https://go.dev/blog/) Go 团队今天荣幸地发布 Go 1.27。你可以在下载页面(https://go.dev/dl/)找到其二进制归档和安装程序。 Go 1.27 在语言、工具链、运行时和标准库方面带来了重大增强。以下是一些关键亮点。 ## 语言变更 Go 1.27 对语言规范(https://go.dev/doc/go1.27#language)进行了三项重要更新。 首先,现在支持泛型方法。例如,请参阅 `math/rand/v2.Rand` (https://go.dev/pkg/math/rand/v2#Rand): ```go // 在 Go 1.27 之前,必须为 Rand 的每种类型添加单独的方法(为简洁起见省略了无符号整数方法)。 func (r *Rand) Int32N(n int32) int32 func (r *Rand) Int64N(n int64) int64 func (r *Rand) IntN(n int) int // Go 1.27 添加了一个新的泛型方法,适用于所有整数类型。 func (r *Rand) N[Int intType](n Int) Int ``` 其次,结构体字面量(https://go.dev/ref/spec#Composite-literals)中的键现在可以是该结构体类型的任何有效字段选择器(https://go.dev/ref/spec#Selectors),允许直接初始化嵌套或嵌入结构体中的字段: ```go type Habitat struct { Burrow string } type Gopher struct { Name string Habitat // 嵌入结构体。 } // Go 1.27 允许直接使用 Burrow 作为键。 g := Gopher{ Name: "Gopher", Burrow: "Burrow #42", } ``` 最后,函数类型推断已推广到适用于所有赋值上下文。泛型函数现在可以在复合字面量、类型转换和通道发送中使用,而无需显式类型参数: ```go func GenericFormatter[T any](v T) string { return fmt.Sprintf("value: %v", v) } type IntFormatter func(int) string // Go 1.27 在复合字面量、转换和通道发送中推断出 T = int。 formatters := []IntFormatter{GenericFormatter} fn := IntFormatter(GenericFormatter) ch := make(chan IntFormatter, 1) ch <- GenericFormatter ``` - `go fix`(https://go.dev/doc/go1.27#go-fix)包含几个新的现代化工具(https://go.dev/pkg/golang.org/x/tools/go/analysis/passes/modernize):`atomictypes`、`embedlit`、`slicesbackward` 和 `unsafefuncs`。 - `go doc`(https://go.dev/doc/go1.27#go-doc)现在支持 `package@version` 查询,例如 `go doc example.com/[email protected]`。 - `go mod tidy`(https://go.dev/doc/go1.27#go-mod-tidy)现在会自动将 `go.mod` 中的多个 `require` 块合并为标准的直接和间接两块结构。 ## 性能与运行时 - 尺寸特化的内存分配(https://go.dev/doc/go1.27#faster-memory-allocation)将小对象(<80B)的分配成本降低了高达 30%,为分配密集型程序整体性能提升约 1%。 - `runtime/pprof`(https://go.dev/pkg/runtime/pprof)中的 `goroutineleak`(https://go.dev/doc/go1.27#goroutineleak-profiles)分析器现已正式可用,可自动检测永久阻塞的 goroutine。 ## 标准库新增 - `encoding/json/v2`(https://go.dev/doc/go1.27#jsonv2)提供具有可配置选项和更严格默认值的高级 JSON 处理,以及用于低级流处理的 `encoding/json/jsontext`(https://go.dev/doc/go1.27#jsonv2)。现有的 `encoding/json`(https://go.dev/pkg/encoding/json)包现在由 v2 实现提供支持,在保持向后兼容性的同时实现了更快的解码。 - `crypto/mldsa`(https://go.dev/doc/go1.27#crypto_mldsa)实现了后量子 ML-DSA 签名方案(FIPS 204),并集成到 `crypto/x509`(https://go.dev/pkg/crypto/x509)和 `crypto/tls`(https://go.dev/pkg/crypto/tls)中。 - `uuid`(https://go.dev/doc/go1.27#uuid)提供生成和解析 UUID 的原生支持。 - `simd`(https://go.dev/doc/go1.27#simd)和特定于架构的 `simd/archsimd`(https://go.dev/doc/go1.27#archsimd)提供实验性的 SIMD 支持。 - `net/http/httptest`(https://go.dev/doc/go1.27#nethttphttptestpkgnethttphttptest)新增 `NewTestServer`(https://go.dev/pkg/net/http/httptest#NewTestServer),提供适用于与 `testing/synctest`(https://go.dev/pkg/testing/synctest)包配合使用的内存内模拟网络。 请阅读 Go 1.27 发行说明(https://go.dev/doc/go1.27)获取完整的变更列表和详细信息。 在接下来的几周里,后续博客文章将更详细地介绍与 Go 1.27 相关的一些主题。请稍后回来阅读这些文章。 感谢所有通过编写代码、提交 bug、试用实验性功能以及测试发行候选版本为本次发布做出贡献的人们。一如既往,如果您发现任何问题,请提交 issue(https://go.dev/issue/new)。 我们希望您喜欢使用 Go 1.27!

相似文章

Go 1.27 发行说明

Lobsters Hottest

Go 1.27 发布引入了泛型方法以及其他语言和工具链更新,同时保持与之前版本的兼容性。

Go 1.27 交互式导览

Lobsters Hottest

Go 1.27 新功能的实践性交互式导览,重点介绍泛型方法、结构体字面量字段选择器等,并提供基于官方发布说明的可运行示例。

Go 1.27 中的泛型方法

Hacker News Top

Go 1.27 引入了泛型方法,允许方法在不修改接收结构体的情况下定义自己的类型参数,从而解决了 Go 1.18 中的局限性。但由于运行时约束,接口仍被排除在外。

JetBrains Go现代编码规范指南

GitHub Trending (daily)

JetBrains发布了一个GitHub仓库,其中包含编写现代Go代码的代码代理指南,涵盖了Go 1.27的所有功能,并与Junie和Claude Code等工具集成。