我们 在二月份发布了 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 为收集覆盖率概况提供了支持 go test 从 Go 1.2 开始 。 Go 1.20 添加了对在二进制文件中收集覆盖率配置文件的支持 由__建造 go build, 还允许您在较大的集成测试期间收集覆盖范围。 有关详细信息,请参阅“ Go 集成测试的代码覆盖率 ”。
自此以来,兼容性一直是 Go 的重要组成部分 “ Go 1 和 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引入了新功能 CMP , 地图 , 和 切片 packages — Go 的第一个通用标准库 — 以及扩展可比较类型的集合。 有关详细信息,请参阅博客文章 “ 所有可比较的类型 ”。
总体而言,我们继续完善仿制药 并撰写演讲和博客文章来解释 重要细节。 今年有两个值得注意的帖子是 “ 解构类型参数 ”, 和 “ 您一直想了解的关于类型推断的一切 - 以及更多 ”。
Go 1.21 中另一个重要的新包是 日志/日志 , 其中添加了官方 API 结构化日志记录到标准库。 请参阅“ 使用 slog 进行结构化日志记录”。 有关概述,
对于 WebAssembly (Wasm) 端口,Go 1.21 提供了支持 用于在 WebAssembly 系统接口 (WASI) 预览版 1 上运行。 WASI 预览版 1 是 Wasm 的新“操作系统”界面 大多数服务器端 Wasm 环境都支持。 请参阅“ Go 中的 WASI 支持 ”了解演练。
在安全方面,我们将继续确保 Go 在帮助开发人员了解他们的产品方面处于领先地位 依赖性和漏洞, 将于 Govulncheck 1.0 7 月推出。 如果您使用 VS Code,您可以直接在您的应用程序中运行 govulncheck 使用 Go 扩展的编辑器: 请参阅 本教程 以开始使用。 如果您使用 GitHub,则可以运行 govulncheck 作为 您的 CI/CD,以及 govulncheck 的 GitHub 操作 。 有关检查依赖项是否存在漏洞问题的更多信息, 参见今年的 Google I/O 演讲, “ 使用 Go 和 Google 构建更安全的应用程序 ”。)
另一个重要的安全里程碑是 Go 1.21 的高度可重复的工具链构建。 有关详细信息,请参阅“ 完美再现、经过验证的 Go 工具链 ”, 包括复制 Ubuntu Linux Go 工具链的演示 在 Mac 上,无需使用任何 Linux 工具。
这是忙碌的一年!
Go 的第 15 个年头,我们将继续努力,让 Go 成为最好的环境 用于大规模软件工程。 我们特别兴奋的一项变化是 重新定义for循环 :=语义来删除 潜在的意外别名错误。 请参阅“ 修复 Go 1.22 中的 For 循环 ” 欲了解详情, 包括在 Go 1.21 中预览此更改的说明。
Go 项目一直不仅仅是我们 Google Go 团队的成员。 感谢我们所有的贡献者和 Go 社区的每个人 让 Go 成为今天的样子。 我们祝愿您在新的一年里一切顺利。