Go 博客
Go 迎来 15 周年

感谢 Renee French 绘制并制作了 gopher 玩“15 拼图”的动画。
生日快乐,Go!
周日,我们庆祝了 Go 开源发布 15 周年!
自 Go 十周年纪念以来,Go 语言本身和整个世界都发生了巨大的变化。从另一方面来看,很多东西也保持不变:Go 始终致力于稳定性、安全性,以及大规模软件工程和生产环境的支持。
Go 依然蓬勃发展!过去五年里,Go 的用户群增长了两倍多,使其成为增长最快的语言之一。短短十五年前,Go 已经发展成为排名前十的语言,也是现代云的语言。
随着 Go 1.22(二月发布)和 Go 1.23(八月发布)的发布,今年是 `for` 循环的年份。Go 1.22 使 `for` 循环引入的变量 作用域变为每个迭代,而不是每个循环,从而解决了长期存在的语言“陷阱”。十多年前,在 Go 1 发布之前,Go 团队就几个语言细节做出了决定;其中包括 `for` 循环是否应该在每次迭代时创建一个新的循环变量。有趣的是,这个讨论非常简短,而且意见不一。Rob Pike 以他一贯的风格,用一个词结束了讨论:“stet”(保持原样)。就这样定了。虽然当时看起来微不足道,但多年的生产经验凸显了这一决定的影响。然而,在那段时间里,我们也构建了强大的工具来理解 Go 变化带来的影响——特别是,跨整个 Google 代码库进行生态系统范围的分析和测试——并建立了与社区合作和收集反馈的流程。在进行了广泛的测试、分析和社区讨论后,我们推出了这一改变,并附带了一个 哈希二分查找工具,以帮助开发者大规模地定位受该更改影响的代码。
对 `for` 循环的更改是过去五年稳步改进的一部分。如果没有 Go 1.21 中引入的 向前语言兼容性,这一切将不可能实现。而这又建立在四年前半 Go 1.14 中引入的 Go 模块所奠定的基础上。
Go 1.23 在此基础上进一步发展,引入了迭代器和 用户定义的 for-range 循环。结合两年前半 Go 1.18 中引入的泛型,这为自定义集合和许多其他编程模式创建了一个强大且符合人体工程学的[foundation](https://go-lang.org.cn/blog/generics-preview)。
这些版本还带来了许多在生产就绪方面的改进,包括对标准库 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 在人工智能基础设施、应用程序和开发者协助方面的能力,致力于让 Go 在人工智能领域做得更好——并让人工智能对 Go 更好。Go 是构建生产系统的优秀语言,我们也希望它成为 构建生产 *人工智能* 系统 的优秀语言。Go 作为云基础设施语言的可靠性使其成为 LLM 基础设施 和 其他 的自然选择。对于人工智能应用程序,我们将继续在流行的 AI SDK 中为 Go 提供一流的支持,包括 LangChainGo 和 Genkit。从一开始,Go 就旨在改进端到端的软件工程流程,因此,我们自然而然地希望将人工智能的最新工具和技术应用于减少开发者的重复劳动,让他们有更多时间去做有趣的事情——比如实际编程!
谢谢
这一切都归功于 Go 令人难以置信的贡献者和蓬勃发展的社区。十五年前,我们只能梦想 Go 能取得今天的成功,以及围绕 Go 发展的社区。感谢每一位或大或小的参与者。祝愿大家在新的一年里一切顺利。
下一篇文章:Go Protobuf:新的 Opaque API
上一篇文章:(别名)名称中有何含义?
博客索引