Go 1.27 发布 - Go 编程语言
摘要
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 发行说明
Go 1.27 发布引入了泛型方法以及其他语言和工具链更新,同时保持与之前版本的兼容性。
Go 1.27 交互式导览
Go 1.27 新功能的实践性交互式导览,重点介绍泛型方法、结构体字面量字段选择器等,并提供基于官方发布说明的可运行示例。
Go 1.27 中的泛型方法
Go 1.27 引入了泛型方法,允许方法在不修改接收结构体的情况下定义自己的类型参数,从而解决了 Go 1.18 中的局限性。但由于运行时约束,接口仍被排除在外。
新的 Go JSON API:快两倍,还是慢1.5倍?
这篇文章对 Go 1.27 中的新 JSON API 进行了基准测试,显示在反序列化方面速度显著提升,但在序列化方面与旧实现相比结果不一。
JetBrains Go现代编码规范指南
JetBrains发布了一个GitHub仓库,其中包含编写现代Go代码的代码代理指南,涵盖了Go 1.27的所有功能,并与Junie和Claude Code等工具集成。