Go 开发者 2021 调查报告

1627

202110 月份,Go 官方进行了 2021GO 开发者调查,此次调查共收到 11840 份回复(这是 6 年来参与人数最多的一次)。下面我们来看一下2021 年面向 Go 开发者的调查报告的报告内容。

亮点

  • 大部分调查结果与往年一致,例如对 Go 的满意程度仍然很高,可达到 92%,受访者在工作中使用 Go 语言的占比达 75%
  • 此次调查的部分受访者来源于 Go VS Code 插件的使用者,因此调查的结果与往年有所差异。
  • 缺少关键库、语言特性和基础设施不够完善是 Go 语言推广使用最常见的障碍(本次调查在 Go 1.18 发布之前进行,此时泛型还没有推出)。
  • 受访者希望优先考虑改进调试功能和依赖管理。
  • 使用模块时遇到的最大挑战包括版本控制、使用私有仓库和多模块工作流。
  • 81% 的受访者对 Go 项目的长期未来发展充满信心。

Go 使用情况

与前几年的调查结果一致,Go 语言主要被用于科技行业。受访者主要有两部分组成,70% 是软件开发人员,其余少数从事 ITDevOps 工作。 76% 的受访者在日常工作中会使用 Go 语言进行编程。

image.png

image.png

72% 的受访者表示他们利用 Go 语言开发 API/RPC 服务,主要应用于 Web 服务、库或者框架和数据分析等。还有少数开发者将 Go 语言应用于桌面应用、AI、游戏的开发。

image.png

受访者来源

  • 大多数受访者来自于企业或者中小型企业,大约四分之一的受访者来自于初创公司。来自于咨询公司和公共机构的受访者较少。
  • 绝大多数受访者工作的团队少于 10 人。
  • 超过一半(55%)的受访者在工作中以 Go 为主要开发语言,但工作之外使用 Go 语言的频率较低。

image.png

性别认同

该调查中询问了有关性别认同的问题,因为这个问题可以让调查方知道受访者的性别因素,可增加另一个维度来衡量社区的包容性。调查结果表明,女性的比例与往年大致相同(2%),在 VsCode 插件中的随机抽样结果也是类似的。

image.png

辅助技术

调查还发现大约 8% 的受访者正在使用一些辅助技术。例如在 Go 相关网站或 IDE 中需要更高对比度的主题或者更大的字体等。Go 官方计划在今年晚些时候根据调查的反馈采取行动,不断推动 Go 生态系统的发展。

Go 应用

Go 官方很关注 Go 语言的应用问题,因此在该调查中加入了一个问题: 调查中会询问受访者,2021年是否同时评估过 Go 以及其他语言。 43% 的受访者表示,从商业化方面考虑,去年曾经评估切换到 Go 语言或者使用 Go 语言。最终调查结果显示,75% 的用户最终选择使用 Go

image.png

Go 的应用场景中,API/RPC 服务是最常见的用途,但令人惊讶的是,数据处理是第二常见的预期用途。

image.png

image.png

对于那些评估过 Go 语言,但并没有最终使用的受访者,调查会随后询问其放弃 Go 语言的原因。

从下图可以看出,放弃原因主要包括:缺少所需的语言特性其他的编程语言对现有的工具和基础设施提供了更好的支持Go 生态缺少所需的库、团队没有使用 Go 的经验、Go 工具不过丰富、Go 性能未能满足需求、招聘 Go 开发者困难等。

image.png

调查结果中显示,语言特性的缺失及生态系统的不够完善是劝退开发者的主要原因。其中泛型是最关键的缺失特性(调查进行的时候尚未发布提供了泛型的 Go 1.18),除了泛型,开发者同样希望引入类型系统相关的特性。Go 官方表示,他们将收集这些受访者的需求信息,在未来的版本中探索满足这些需求的方法,例如通过工具、库或更改类型系统。

如果没有选择 Go 语言,那这些受访者他们最终选择了什么语言呐?

image.png

从上图可以看出,放弃 Go 语言的受访者们更多的选择了 RustPythonJava语言。

  • RustGo 语言有互补的特性,因此如果 Go 不能满足项目的功能需求时,Rust 是一个不错的选择。
  • 选择 Python 的主要原因是 Python 具备良好的生态系统,这是目前 Go 无法做到的。
  • 使用 Java 语言主要是因为 Go 缺少部分语言特性,1.18 版本中引入泛型来 Go 的使用量可能会增加。

开发者对 Go 的满意度

与去年一致,调查表明 92% 的受访者对去年 Go 语言的使用感到非常满意或比较满意。

image.png

此外越来越多的受访者表示 Go 对于他们公司的成功提供了至关重要的帮助。

image.png

image.png

Go 的优先级

过去几年,调查中通常要求受访者对特定领域的满意度以及这些领域的重要性进行评分,官方利用这些调查结果来找出一些对受访者很重要但却不满意的领域。但调查结果发现大多数领域在重要性和满意度方面仅显示出微小的差异。

image.png

今年调查中,Go 官方设置了一个新问题,以探索确定特定领域工作优先级的替代方法。“假设您有 10GopherCoins 可用于改进使用 Go 的以下方面。你将如何分配你的硬币”,结果显示,依赖管理和错误诊断部分收获了最多的 GopherCoins 数量,因此 2022 年,Go 官方会重点处理这两个领域。

image.png

学习 Go 语言

绝大多数受访者(88%)认为使用 Go 语言开发效率特别高,85% 受访者也认为使用 Go 开发非常顺畅。

image.png

实践文档

一半的受访者希望能获得有关性能优化和项目目录结构最佳实践的指导。而且新的 Gophers(使用 Go 不到 1 年)比更有经验的 Gophers 需要更多的指导。

image.png

如何学习一门新语言

大约一半的受访者表示在工作中学到一门新语言,但几乎同样多的人(45%)表示在学校或者工作之外学习到新语言。

image.png

image.png

开发者工具和实践

与往年一样,绝大多数受访者表示在 LinuxmaxOS 系统上使用 Go 语言,但随着时间的推移,在 Linux 进行 Go 开发的受访者比例略有下降。

image.png

部署平台

超过 90% 的受访者选择 Linux 作为部署平台。另外尽管 macOS 使用 Go 的开发者多于 Windows 系统,但他们更倾向于部署到 Windows 系统。

image.png

模糊测试

大多数受访者并不熟悉模糊测试或者仍然认为自己是模糊测试的新手,基于这一发现,Go 官方在 fuzzing 文档中除了解释 fuzzing 的细节之外,还详细解释了 fuzzing 的概念。

image.png

云计算

Go 在设计之初就考虑了现代分布式计算,今年 Go 官方希望能继续改善开发人员使用 Go 构建云服务的体验。调查显示将 Go 程序部署到全球三大云提供商(亚马逊网络服务、谷歌云平台和微软 Azure)的受访者比例基本保持不变,而自有或公司拥有的服务器的本地部署继续减少。

image.png

从调查结果可以看出,部署到 AWS 和部署到托管 Kubernetes 平台的人数有所增加,部署到 VM 的用户比例有所下降。

image.png

新变化

此次调查最显著的变化是招募参与者的方式,以往几年,我们主要通过 Go 博客公布这项调查,同时在 TwitterRedditHacker News 等各种社交渠道上发布。但此次调查除了传统渠道外,我们还使用 VS Code Go 插件随机选择用户,询问他们是否愿意参与调查。

image.png

我们可以看到几乎有三分之一的受访者来源于随机取样(插件),这部分受访者会对此次调查产生较大的影响。

更多新 Gophers

随机选择的样本中包含更高比例的新 Gophers(使用 Go 不到一年的人)用户。

image.png

更多的 VS Code 用户

来源于 VS Code 插件的受访者中,有 91% 的受访者喜欢用 VS Code 开发 Go 语言,因此今年调查中 VS Code 的偏好值较高,但当我们去除掉插件部分的样本后,与去年的调查结果大致相似。 VS Code 使用者更偏向于使用 Windows 进行开发,因此 Windows 的偏好也略有增加。

image.png

image.png

image.png

结论

下面我们来总结一下 Go 开发者 2021 调查报告的部分关键要点:

  • 此次调查的样本虽然有所变化,但大部分同比指标保持稳定。
  • 开发者对 Go 的满意度仍然很高
  • 四分之三的受访者在工作中使用 Go,很多受访者每天都在使用 Go
  • Go 团队将优先改进调试和依赖管理的工作流程

如果你想阅读完整的调查报告,请参考 go.dev/blog/survey…