Go 博客

Go 的十三年

Go 团队的 Russ Cox
2022 年 11 月 10 日

今天,我们庆祝 Go 开源发布的第十三周年。Gopher 已经进入青春期了!

Go 今年经历了诸多大事。最重大的事件是3 月份发布的 Go 1.18,它带来了许多改进,但最值得注意的是 Go 工作区、模糊测试和泛型。

工作区使同时处理多个模块变得容易,当您维护一组具有模块之间依赖关系的相关模块时,这将非常有用。要了解有关工作区的更多信息,请参阅 Beth Brown 的博客文章“熟悉工作区”和工作区参考

模糊测试是go test 的一项新功能,可帮助您查找代码无法正确处理的输入:您定义一个应该对任何输入都通过的模糊测试,然后模糊测试尝试不同的随机输入(由代码覆盖率引导)以尝试使模糊测试失败。在开发必须对任意(甚至攻击者控制的)输入具有鲁棒性的代码时,模糊测试特别有用。要了解有关模糊测试的更多信息,请参阅教程“模糊测试入门”和模糊测试参考,并关注 Katie Hockman 在 GopherCon 2022 上的演讲“模糊测试变得简单”,该演讲很快就会上线。

泛型可能是 Go 最受请求的功能,它为 Go 添加了参数多态性,以允许编写适用于各种不同类型的代码,但在编译时仍进行静态检查。要了解有关泛型的更多信息,请参阅教程“泛型入门”。有关更多详细信息,请参阅博客文章“泛型简介”和“何时使用泛型”,或演讲“在 Go 中使用泛型”(来自 2021 年 Google 开源直播 Go Day)和“泛型!”(来自 2021 年 GopherCon),由 Robert Griesemer 和 Ian Lance Taylor 发表。

与 Go 1.18 相比,8 月份发布的 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 编辑器构建更好的项目”以获取概述。作为奖励,在 VS Code 中调试 Go 凭借 Delve 的原生调试适配器协议支持变得更加可靠和强大。试试 Suzy 的“调试寻宝游戏”!

开发规模的另一个方面是项目中的依赖项数量。在 Go 12 周年纪念日后的一个月左右,Log4shell 漏洞 提醒了业界供应链安全的重要性。Go 的模块系统就是为此目的而设计的,可以帮助您了解和跟踪依赖项,识别您正在使用的特定依赖项,并确定其中是否存在任何已知的漏洞。Filippo Valsorda 的博客文章“Go 如何缓解供应链攻击”概述了我们的方法。9 月份,我们在 Julie Qiu 的博客文章“Go 的漏洞管理”中预览了 Go 对漏洞管理的方法。这项工作的核心是一个新的、经过策划的漏洞数据库和一个新的govulncheck 命令,它使用高级静态分析来消除仅使用模块要求会导致的大多数误报。

我们了解 Go 用户工作的一部分是我们每年年底的 Go 调查。今年,我们的用户体验研究人员还添加了一项轻量级的年中 Go 调查。我们的目标是在不给整个 Go 社区造成负担的情况下收集到具有统计意义的足够多的回复。有关结果,请参阅 Alice Merrick 的博客文章“2021 年 Go 开发者调查结果”和 Todd Kulesza 的文章“2022 年第二季度 Go 开发者调查结果”。

随着世界开始更多地旅行,我们也很高兴在 2022 年的 Go 大会上亲自见到许多人,特别是在 7 月份柏林举行的 GopherCon Europe 和 10 月份芝加哥举行的 GopherCon。上周,我们举办了年度虚拟活动Google 开源直播 Go Day。以下是在这些活动中发表的一些演讲

今年的另一个里程碑是发表了 Russ Cox、Robert Griesemer、Rob Pike、Ian Lance Taylor 和 Ken Thompson 合著的“Go 编程语言和环境”,该文章发表在《ACM 通信》上。这篇文章由 Go 的最初设计者和实现者撰写,解释了我们认为是什么让 Go 如此受欢迎和高效。简而言之,Go 的努力重点是提供一个针对整个软件开发过程的完整开发环境,重点是扩展到大型软件工程工作和大型部署。

在 Go 的第 14 个年头,我们将继续努力使 Go 成为规模化软件工程的最佳环境。我们计划特别关注供应链安全、改进的兼容性和结构化日志记录,所有这些都在本文中已经链接。还会有许多其他改进,包括配置文件引导优化。

谢谢!

Go 一直远远超出了 Google 的 Go 团队所做的工作。感谢大家——我们的贡献者和 Go 社区中的每个人——感谢大家帮助 Go 成为今天成功的编程环境。我们祝愿大家在新的一年里一切顺利。

下一篇文章:分享您对使用 Go 进行开发的反馈
上一篇文章:Go 运行时:四年后
博客索引