Go 博客
Go 十五岁了

感谢 Renee French 绘制并制作了玩“15 数字谜题”的 gopher 动画。
Go 生日快乐!
周日,我们庆祝了 Go 开源发布十五周年!
自 Go 十周年以来,Go 本身和世界都发生了许多变化。在其他方面,许多东西保持不变:Go 仍然致力于稳定性、安全性和支持大规模软件工程及生产。
Go 发展势头强劲!过去五年中,Go 的用户群增长了两倍多,使其成为增长最快的语言之一。从十五年前的起步,Go 已成为十大编程语言之一,并成为现代云的语言。
随着 2 月份发布的 Go 1.22 和 8 月份发布的 Go 1.23,今年是 for
循环之年。Go 1.22 将 for
循环引入的变量作用域设为每次迭代一次,而不是每个循环一次,解决了语言中一个长期存在的“陷阱”。十多年前,在 Go 1 发布前,Go 团队就几个语言细节做出了决定;其中包括 for
循环是否应该在每次迭代中创建一个新的循环变量。有趣的是,讨论非常简短,而且意见并不强烈。Rob Pike 以他特有的 Rob Pike 式的方式用一个词结束了讨论:“stet”(保持原样)。于是就这样定了。虽然当时看来微不足道,但多年的生产经验凸显了这一决定的影响。然而,在这段时间里,我们也构建了强大的工具来理解 Go 变化的 etkects,特别是对整个 Google 代码库进行生态系统范围的分析和测试,并建立了与社区合作和获取反馈的流程。在经过广泛的测试、分析和社区讨论后,我们推出了这项变更,并附带了一个哈希二分工具,以帮助开发者大规模精确定位受此变更影响的代码。
对 for
循环的修改是五年渐进式变更轨迹的一部分。如果没有 Go 1.21 引入的语言向前兼容性,这是不可能实现的。而这又建立在四年半前 Go 1.14 中引入的 Go 模块所奠定的基础上。
Go 1.23 在此基础上进一步引入了迭代器和用户定义的 for-range 循环。与 Go 1.18 中引入的泛型——仅仅两年半前!——相结合,这为自定义集合和许多其他编程模式奠定了强大而符合人体工程学的基础。
这些版本还在生产准备方面带来了许多改进,包括备受期待的标准库 HTTP 路由器增强功能、执行跟踪的全面改进以及所有 Go 应用程序的更强随机性。此外,我们第一个 v2 标准库包的引入为未来的库演进和现代化奠定了模板。
在过去一年里,我们还谨慎地为 Go 工具推出了可选遥测功能。这个系统将为 Go 开发者提供数据,以便做出更好的决策,同时完全保持开放和匿名。Go 遥测首先出现在Go 语言服务器 gopls 中,在那里它已经带来了大量的改进。这项努力为让每个人在 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 的一流支持,包括 LangChainGo 和 Genkit。而且从一开始,Go 就旨在改进端到端软件工程流程,因此我们自然而然地希望将 AI 的最新工具和技术应用于减少开发者的辛劳,留下更多时间进行有趣的事情——比如真正的编程!
谢谢
这一切都归功于 Go 出色的贡献者和蓬勃发展的社区。十五年前,我们只能梦想 Go 能取得今天的成就以及围绕 Go 发展起来的社区。感谢所有做出贡献的人,无论贡献大小。我们祝大家来年一切顺利。
下一篇文章:Go Protobuf: 新的 Opaque API
上一篇文章:别名 (Alias) 中有什么?
博客索引