Go 博客

Go 语言十四周年

Russ Cox,代表 Go 团队
2023 年 11 月 10 日

今天我们庆祝 Go 开源版本发布十四周年!Go 度过了出色的一年,发布了两个功能丰富的版本,并取得了其他重要里程碑。

我们在 2 月发布了 Go 1.20,在 8 月发布了 Go 1.21,更多地侧重于实现改进,而不是新的语言更改。

配置文件引导优化 (PGO) 在 Go 1.20 中预览,并在 Go 1.21 中正式发布,它允许 Go 编译器读取程序的配置文件,然后花费更多时间优化程序中运行最频繁的部分。在 Go 1.21 中,通过启用 PGO,工作负载的 CPU 使用率通常可以提高 2% 到 7%。请参阅“Go 1.21 中的配置文件引导优化”获取概览,并参阅 配置文件引导优化用户指南获取完整文档。

Go 1.2 起,Go 就提供了在 go test 期间收集覆盖率配置文件的支持。Go 1.20 新增了对在 go build 构建的二进制文件中收集覆盖率配置文件的支持,允许您在更大的集成测试期间收集覆盖率。请参阅“Go 集成测试的代码覆盖率”了解详情。

自“Go 1 和 Go 程序的未来”以来,兼容性一直是 Go 的重要组成部分。Go 1.21 通过扩展在需要进行更改(例如重要的错误修复)时使用 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 在帮助开发者了解其依赖项和漏洞方面处于领先地位,Govulncheck 1.0 于 7 月发布。如果您使用 VS Code,可以使用 Go 扩展直接在编辑器中运行 govulncheck:请参阅此教程以开始使用。如果您使用 GitHub,可以使用 GitHub Action for govulncheck 作为 CI/CD 的一部分运行 govulncheck。有关检查依赖项是否存在漏洞问题的更多信息,请参阅今年 Google I/O 上的讲座“使用 Go 和 Google 构建更安全的应用程序”)。

另一个重要的安全里程碑是 Go 1.21 的高度可重现工具链构建。请参阅“完美可重现、已验证的 Go 工具链”了解详情,包括演示如何在 Mac 上重现 Ubuntu Linux Go 工具链,而无需使用任何 Linux 工具。

这是忙碌的一年!

在 Go 的第 15 个年头,我们将继续努力使 Go 成为大规模软件工程的最佳环境。我们特别兴奋的一项更改是重新定义 for 循环的 := 语义,以消除意外别名错误的潜在问题。请参阅“Go 1.22 中修复 For 循环”了解详情,包括如何在 Go 1.21 中预览此更改的说明。

谢谢!

Go 项目远不止我们 Google 的 Go 团队。感谢所有贡献者和 Go 社区的每一位成员,正是你们成就了今天的 Go。祝大家在新的一年一切顺利。

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