Go 博客

Go 15 周年

Go 团队的 Austin Clements
2024 年 11 月 11 日


感谢 Renee French 绘制和动画化了正在进行“15 拼图”的 gopher。

Go 生日快乐!

星期天,我们庆祝了 Go 开源版本发布 15 周年纪念日!

Go 10 周年纪念日 以来,Go 和世界都发生了翻天覆地的变化。但在其他方面,很多东西都保持不变:Go 仍然致力于稳定性、安全性以及支持大规模的软件工程和生产。

Go 发展势头强劲!Go 的用户群在过去五年里增长了两倍多,使其成为增长最快的语言之一。从 15 年前的起步至今,Go 已成为前 10 大编程语言之一,并成为现代云计算的语言。

随着 2 月份发布的 Go 1.228 月份发布的 Go 1.23,这一年是 for 循环之年。Go 1.22 使 for 循环引入的变量 按迭代范围限定,而不是按循环范围限定,从而解决了长期存在的语言“陷阱”。十多年前,在 Go 1 发布之前,Go 团队对一些语言细节做出了决定;其中包括 for 循环是否应该在每次迭代中创建一个新的循环变量。有趣的是,讨论非常简短,而且明显没有倾向性。Rob Pike 以 Rob Pike 特有的方式用一个词结束了讨论:“stet”(保持不变)。就这样。虽然当时看起来微不足道,但多年的生产经验突出了这一决定的影响。但在此期间,我们还构建了强大的工具来了解对 Go 进行更改的影响——尤其是对整个 Google 代码库进行的生态系统范围内的分析和测试——并建立了与社区合作和获取反馈的流程。在经过广泛的测试、分析和社区讨论后,我们推出了这一更改,并提供了一个 哈希分段工具 来帮助开发人员大规模地查明受更改影响的代码。

for 循环的更改是五年来循序渐进的变化的一部分。如果没有 Go 1.21 中引入的 向前语言兼容性,这是不可能实现的。这反过来又建立在 Go 模块奠定的基础之上,Go 模块在四年前的 Go 1.14 中引入。

Go 1.23 进一步构建了此更改以引入迭代器和 用户定义的 for-range 循环。结合泛型(在两年前的 Go 1.18 中引入!),这为自定义集合和许多其他编程模式创建了一个强大且符合人体工程学的基础。

这些版本还在生产就绪方面带来了许多改进,包括 对标准库的 HTTP 路由器进行的期待已久的增强对执行跟踪的全面检修以及 更强的随机性 用于所有 Go 应用程序。此外,我们 第一个 v2 标准库包 的引入为未来的库演进和现代化建立了模板。

在过去的一年里,我们还谨慎地推出了 可选遥测 用于 Go 工具。此系统将为 Go 的开发人员提供数据以做出更好的决策,同时保持完全 开放 和匿名。Go 遥测首先出现在 gopls(Go 语言服务器)中,在那里它已经导致了 大量改进。这项工作为使每个人都能获得更好的 Go 编程体验铺平了道路。

展望未来,我们正在改进 Go 以更好地利用当前和未来硬件的功能。硬件在过去 15 年里发生了很大变化。为了确保 Go 继续支持未来 15 年的高性能、大规模生产工作负载,我们需要适应大型多核、高级指令集以及局部性在内存层次结构越来越不均匀的情况下日益增长的重要性。其中一些改进将是透明的。Go 1.24 将在后台有一个全新的 map 实现,在现代 CPU 上效率更高。我们还在原型设计新的垃圾回收算法,这些算法的设计围绕着现代硬件的功能和约束。一些改进将以新 API 和工具的形式出现,以便 Go 开发人员能够更好地利用现代硬件。我们正在研究如何支持最新的向量和矩阵硬件指令,以及应用程序如何构建 CPU 和内存局部性的多种方法。指导我们工作的核心原则是可组合优化:优化对代码库的影响应尽可能局部化,确保不会影响代码库其余部分的易开发性。

我们继续确保 Go 的标准库默认安全且设计安全。这包括正在进行的工作,以将内置的、本机支持的 FIPS 认证加密纳入其中,以便 FIPS 加密只需一键即可用于需要它的应用程序。此外,我们正在改进 Go 的标准库包,并在math/rand/v2的示例之后,考虑新的 API 在哪里可以显著增强编写安全可靠的 Go 代码的便捷性。

我们正在努力使 Go 更好地用于 AI——并使 AI 更好地用于 Go——通过增强 Go 在 AI 基础设施、应用程序和开发人员协助方面的功能。Go 是一种构建生产系统的优秀语言,我们希望它也成为构建生产AI系统的优秀语言。Go 作为云基础设施语言的可靠性使其成为 LLM 基础设施 以及 其他 的自然选择。对于 AI 应用程序,我们将继续在流行的 AI SDK 中构建 Go 的一流支持,包括 LangChainGoGenkit。从一开始,Go 的目标就是改进端到端的软件工程流程,因此我们很自然地希望将 AI 中的最新工具和技术用于减少开发人员的工作量,从而腾出更多时间来做有趣的事情——比如真正地编程!

感谢

所有这一切都只能归功于 Go 令人难以置信的贡献者和蓬勃发展的社区。15 年前,我们只能梦想着 Go 会取得如此成功,以及围绕 Go 发展起来的社区。感谢所有参与其中的人,无论大小。我们祝愿大家在新的一年里一切顺利。

上一篇文章:别名有什么意义?
博客索引