Go 博客

Go语言十四年

Russ Cox,为 Go 团队撰写
2023年11月10日

今天我们庆祝Go开源版发布十四周年!Go在过去一年中取得了辉煌的成就,发布了两个功能丰富的版本,并实现了其他重要里程碑。

我们分别于2023年2月发布了Go 1.20,并于2023年8月发布了Go 1.21,更加关注实现上的改进而非语言本身的新增特性。

Profile-guided optimization (PGO)(在Go 1.20中预览在Go 1.21中发布)允许Go编译器读取程序的分析报告,然后将更多时间用于优化程序中最常运行的部分。在Go 1.21中,启用PGO后,通常可以使CPU使用率提升2%到7%。有关概述,请参阅“Go 1.21 中的Profile-guided optimization”,有关完整文档,请参阅Profile-guided optimization 用户指南

Go 1.2以来,Go一直支持在go test期间收集覆盖率报告。Go 1.20增加了对go build构建的二进制文件收集覆盖率报告的支持,这使得您也可以在更大型的集成测试期间收集覆盖率。有关详细信息,请参阅“Go集成测试的代码覆盖率”。

自“Go 1 和 Go 程序的未来”以来,兼容性一直是Go的重要组成部分。Go 1.21通过扩大GODEBUG的使用约定,进一步改进了兼容性。在我们需要进行更改(例如重要的bug修复)但可能仍会破坏现有程序的情况下,可以使用GODEBUG。有关概述,请参阅博客文章“向后兼容性、Go 1.21 和 Go 2”,有关详细信息,请参阅文档“Go、向后兼容性与GODEBUG”。

Go 1.21 还提供了对内置工具链管理的更好支持,让您可以像更改其他依赖项的版本一样,轻松地更改特定模块中使用的Go工具链版本。有关概述,请参阅博客文章“Go 1.21 中的向前兼容性和工具链管理”,有关详细信息,请参阅文档“Go 工具链”。

另一个重要的工具链改进是将磁盘索引集成到gopls(Go LSP服务器)中。这在典型用例中将gopls的启动延迟和内存使用量降低了3-5倍。“为不断增长的Go生态系统扩展gopls”解释了技术细节。您可以通过运行以下命令来确保您使用的是最新的gopls:

go install golang.org/x/tools/gopls@latest

Go 1.21 引入了新的 cmpmapsslices 包——这是Go的第一个泛型标准库——并扩展了可比较类型的集合。有关详细信息,请参阅博客文章“你所有的可比较类型”。

总的来说,我们继续完善泛型,并撰写演讲和博客文章来解释重要的细节。今年有两个值得注意的帖子:“解构类型参数”和“关于类型推断,你一直想知道的一切——以及更多”。

Go 1.21 中另一个重要的包是 log/slog,它为标准库添加了一个结构化日志的官方API。有关概述,请参阅“使用slog进行结构化日志记录”。

对于WebAssembly (Wasm) 端口,Go 1.21 增加了对在WebAssembly System Interface (WASI) preview 1上运行的支持。WASI preview 1是一个新的 Wasm“操作系统”接口,大多数服务器端 Wasm 环境都支持它。有关演练,请参阅“Go 中的 WASI 支持”。

在安全方面,我们继续确保Go在帮助开发者了解其依赖项和漏洞方面处于领先地位,并于7月推出了Govulncheck 1.0。如果您使用VS Code,您可以通过Go扩展直接在编辑器中运行govulncheck:请参阅本教程开始。如果您使用GitHub,您可以在CI/CD中使用govulncheck,使用GitHub Action for govulncheck。有关检查依赖项中的漏洞问题的更多信息,请参阅今年的Google I/O演讲“使用Go和Google构建更安全的应用”。)

另一个重要的安全里程碑是Go 1.21高度可复现的工具链构建。有关详细信息,请参阅“完全可复现、经过验证的Go工具链”,包括在不使用任何Linux工具的情况下,在Mac上复现Ubuntu Linux Go工具链的演示。

这一年忙碌充实!

在Go的第15年,我们将继续努力,使Go成为大规模软件工程的最佳环境。我们特别激动的一项改变是重新定义 for 循环的 := 语义,以消除意外的别名(aliasing)bug。有关详细信息,包括在Go 1.21 中预览此更改的说明,请参阅“修复Go 1.22 中的For循环”。

感谢!

Go项目远不止Google的Go团队。感谢所有贡献者以及Go社区的每个人,是你们共同成就了今天的Go。祝愿大家在新的一年里一切顺利。

下一篇文章: Go开发者调查2023 H2结果
上一篇文章: 关于类型推断,你一直想知道的一切——以及更多
博客索引