Go 博客
Go 语言的十三年

今天我们庆祝 Go 开源发布十三周年。地鼠 Gopher 已经是个少年啦!
对 Go 来说,这是不平凡的一年。最重要的事件是三月份发布的 Go 1.18,它带来了许多改进,其中最引人注目的是 Go 工作区(workspaces)、模糊测试(fuzzing)和泛型(generics)。
工作区使得同时处理多个模块变得容易,这在维护一组相互之间存在模块依赖的相关模块时非常有用。要了解工作区,请参阅 Beth Brown 的博客文章“熟悉 Go 工作区”和工作区参考。
模糊测试是 go
test
的一个新特性,它可以帮助您找到代码未能正确处理的输入:您可以定义一个模糊测试,它应该适用于任何输入,然后模糊测试会在代码覆盖率的引导下尝试不同的随机输入,试图使模糊测试失败。当开发必须对任意(甚至攻击者控制的)输入具有鲁棒性的代码时,模糊测试特别有用。要了解更多关于模糊测试的信息,请参阅教程“模糊测试入门”和模糊测试参考,并留意 Katie Hockman 在 GopherCon 2022 上的演讲“Fuzz Testing Made Easy”,该演讲应该很快就会在线发布。
泛型(Generics),很可能是 Go 最受期待的特性,它为 Go 增加了参数多态性,允许编写适用于各种不同类型但仍能在编译时进行静态检查的代码。要了解更多关于泛型的信息,请参阅教程“泛型入门”。要了解更多细节,请参阅博客文章“泛型介绍”和“何时使用泛型”,或者 Robert Griesemer 和 Ian Lance Taylor 在 Google Open Source Live 2021 的 Go Day 上的演讲“在 Go 中使用泛型”,以及在 GopherCon 2021 上的演讲“泛型!”。
与 Go 1.18 相比,八月份发布的 Go 1.19 相对平静:它专注于完善和改进 Go 1.18 引入的特性,以及内部稳定性改进和优化。Go 1.19 中一个明显的变化是增加了对Go 文档注释中的链接、列表和标题的支持。另一个变化是为垃圾收集器添加了软内存限制,这在容器工作负载中特别有用。要了解更多关于近期垃圾收集器改进的信息,请参阅 Michael Knyszek 的博客文章“Go 运行时:四年回顾”,他的演讲“在 Go 中尊重内存限制”,以及新的“Go 垃圾收集器指南”。
我们一直在努力让 Go 开发能够优雅地扩展到更大的代码库,特别是在 VS Code Go 和 Gopls 语言服务器方面的工作。今年,Gopls 版本专注于改进稳定性和性能,同时提供了对泛型的支持以及新的分析和代码透镜。如果您还没有使用 VS Code Go 或 Gopls,请尝试一下。请参阅 Suzy Mueller 的演讲“使用 Go 编辑器构建更好的项目”以获取概述。此外,得益于 Delve 对原生 Debug Adapter Protocol 的支持,在 VS Code 中调试 Go 变得更加可靠和强大。试试 Suzy 的“调试寻宝”吧!
开发规模的另一方面是项目中的依赖数量。在 Go 诞生 12 周年大约一个月后,Log4shell 漏洞为行业敲响了警钟,强调了供应链安全的重要性。Go 的模块系统正是为此目的而设计的,旨在帮助您理解和跟踪依赖关系,确定您正在使用哪些特定的依赖,并判断其中是否存在已知漏洞。Filippo Valsorda 的博客文章“Go 如何缓解供应链攻击”概述了我们的方法。九月份,我们在 Julie Qiu 的博客文章“Go 的漏洞管理”中预告了 Go 在漏洞管理方面的方法。这项工作的核心是一个新的、经过精心策划的漏洞数据库和一个新的 govulncheck 命令,该命令使用高级静态分析来消除仅依赖模块需求可能导致的大部分误报。
为了了解 Go 用户,我们每年都会进行 Go 年度问卷调查。今年,我们的用户体验研究人员还增加了一项轻量级的年中 Go 问卷调查。我们的目标是收集足够的回复以达到统计学意义,同时不对整个 Go 社区造成负担。有关结果,请参阅 Alice Merrick 的博客文章“Go 开发者 2021 年度调查结果”和 Todd Kulesza 的文章“Go 开发者 2022 年第二季度调查结果”。
随着世界各地逐渐恢复旅行,我们也高兴能在 2022 年的 Go 大会上与各位见面,特别是在七月份柏林的 GopherCon Europe 和十月份芝加哥的 GopherCon 大会。上周,我们举办了年度线上活动,Google Open Source Live 上的 Go 日。以下是我们在这些活动中发表的部分演讲
- “Go 如何成为最好的自己”,Cameron Balahan 在 GopherCon Europe 发表。
- “Go 团队问答”,Cameron Balahan、Michael Knyszek 和 Than McIntosh 在 GopherCon Europe 发表。
- “兼容性:Go 程序如何保持运行”,Russ Cox 在 GopherCon 发表。
- “整体 Go 体验”,Cameron Balahan 在 GopherCon 发表(视频尚未发布)
- “Go 的结构化日志”,Jonathan Amsterdam 在 Google Open Source Live 上的 Go 日发表
- “使用 Go 更快更安全地编写应用程序”,Cody Oss 在 Google Open Source Live 上的 Go 日发表
- “在 Go 中尊重内存限制”,Michael Knyszek 在 Google Open Source Live 上的 Go 日发表
今年的另一个里程碑是 Russ Cox、Robert Griesemer、Rob Pike、Ian Lance Taylor 和 Ken Thompson 在 Communications of the ACM 上发表了文章“Go 编程语言和环境”。这篇由 Go 最初设计者和实现者撰写的文章解释了我们认为使 Go 如此流行和高效的原因。简而言之,Go 的努力在于提供一个完整的开发环境,面向整个软件开发过程,并侧重于可伸缩性,既适用于大型软件工程项目,也适用于大规模部署。
在 Go 语言的第 14 个年头,我们将继续努力使 Go 成为大规模软件工程的最佳环境。我们计划特别关注供应链安全、改进的兼容性以及结构化日志,所有这些都在本文中已经链接过。此外,还会有许多其他改进,包括配置文件引导优化(profile-guided optimization)。
谢谢!
Go 语言的成就远不止于 Google 的 Go 团队所做的一切。感谢所有贡献者和 Go 社区的每一位成员,感谢你们的帮助使 Go 成为今天如此成功的编程环境。我们祝大家在新的一年里一切顺利。
下一篇文章:分享您关于使用 Go 开发的反馈
上一篇文章:Go 运行时:四年回顾
博客索引