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

举报
陈明勇0423 发表于 2026/07/07 14:37:43 2026/07/07
【摘要】 Go 1.26.0 在语言、工具链、运行时、编译器以及标准库方面都有不少改进,并带来了 new 内置函数增强、泛型约束放宽、go fix 重构以及 Green Tea GC 默认启用等重要变化。 此次更新不仅进一步提升了语言表达能力和工具链体验,也在运行时性能方面继续优化,例如降低 GC 开销、减少 cgo 调用成本,并让切片底层存储在更多场景下可以分配到栈上。

> 作者:陈明勇,一名热爱技术、乐于分享的开发者,同时也是开源爱好者。
>
> 我专注于分享 Go 语言相关的技术知识,同时也会深入探讨 AI 领域的前沿技术。
>
> 成功的路上并不拥挤,有没有兴趣结个伴?
>
> Go 开源库代表作:[go-mongox](https://github.com/chenmingyong0423/go-mongox) 、[go-optioner](https://github.com/chenmingyong0423/go-optioner)。
>
> 文章持续更新,如果本文能让您有所收获,欢迎关注本号。
>
> 微信阅读可搜《程序员陈明勇》。

# 前言

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

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

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

image.png

# 快速安装

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

[Go 1.26.0 下载](https://go.dev/dl/#go1.26.0)

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

```bash
$ 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` 内置函数不再只能接收类型,现在还可以直接传入一个表达式,用来指定该变量的初始值。

以前我们会这样写:

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

现在可以简化为:

```go
ptr := new(int64(300))
```

## 泛型设计的优化

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

例如下面的接口:

```go
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.26` 对 `go 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
go get go@1.26
```

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

### cmd/doc

`cmd/doc` 和 `go 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`,也就是混合公钥加密,并包含对后量子混合 `KEM`z 的支持。

## `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` 都带来了不少实用改进。

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

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。