2021
年 10
月份,Go
官方进行了 2021
年 GO
开发者调查,此次调查共收到 11840
份回复(这是 6
年来参与人数最多的一次)。下面我们来看一下2021 年面向 Go 开发者的调查报告的报告内容。
亮点
- 大部分调查结果与往年一致,例如对
Go
的满意程度仍然很高,可达到92%
,受访者在工作中使用Go
语言的占比达75%
。 - 此次调查的部分受访者来源于
Go VS Code
插件的使用者,因此调查的结果与往年有所差异。 - 缺少关键库、语言特性和基础设施不够完善是
Go
语言推广使用最常见的障碍(本次调查在Go 1.18
发布之前进行,此时泛型还没有推出)。 - 受访者希望优先考虑改进调试功能和依赖管理。
- 使用模块时遇到的最大挑战包括版本控制、使用私有仓库和多模块工作流。
81%
的受访者对Go
项目的长期未来发展充满信心。
Go 使用情况
与前几年的调查结果一致,Go
语言主要被用于科技行业。受访者主要有两部分组成,70%
是软件开发人员,其余少数从事 IT
或 DevOps
工作。 76%
的受访者在日常工作中会使用 Go
语言进行编程。
72%
的受访者表示他们利用 Go
语言开发 API/RPC
服务,主要应用于 Web
服务、库或者框架和数据分析等。还有少数开发者将 Go
语言应用于桌面应用、AI
、游戏的开发。
受访者来源
- 大多数受访者来自于企业或者中小型企业,大约四分之一的受访者来自于初创公司。来自于咨询公司和公共机构的受访者较少。
- 绝大多数受访者工作的团队少于 10 人。
- 超过一半(55%)的受访者在工作中以 Go 为主要开发语言,但工作之外使用 Go 语言的频率较低。
性别认同
该调查中询问了有关性别认同的问题,因为这个问题可以让调查方知道受访者的性别因素,可增加另一个维度来衡量社区的包容性。调查结果表明,女性的比例与往年大致相同(2%),在 VsCode
插件中的随机抽样结果也是类似的。
辅助技术
调查还发现大约 8%
的受访者正在使用一些辅助技术。例如在 Go
相关网站或 IDE
中需要更高对比度的主题或者更大的字体等。Go
官方计划在今年晚些时候根据调查的反馈采取行动,不断推动 Go
生态系统的发展。
Go 应用
Go 官方很关注 Go 语言的应用问题,因此在该调查中加入了一个问题: 调查中会询问受访者,2021年是否同时评估过 Go 以及其他语言。
43%
的受访者表示,从商业化方面考虑,去年曾经评估切换到 Go
语言或者使用 Go
语言。最终调查结果显示,75%
的用户最终选择使用 Go
。
Go
的应用场景中,API/RPC
服务是最常见的用途,但令人惊讶的是,数据处理是第二常见的预期用途。
对于那些评估过 Go
语言,但并没有最终使用的受访者,调查会随后询问其放弃 Go
语言的原因。
从下图可以看出,放弃原因主要包括:缺少所需的语言特性、其他的编程语言对现有的工具和基础设施提供了更好的支持、Go 生态缺少所需的库、团队没有使用 Go
的经验、Go
工具不过丰富、Go
性能未能满足需求、招聘 Go
开发者困难等。
调查结果中显示,语言特性的缺失及生态系统的不够完善是劝退开发者的主要原因。其中泛型是最关键的缺失特性(调查进行的时候尚未发布提供了泛型的 Go 1.18
),除了泛型,开发者同样希望引入类型系统相关的特性。Go
官方表示,他们将收集这些受访者的需求信息,在未来的版本中探索满足这些需求的方法,例如通过工具、库或更改类型系统。
如果没有选择 Go
语言,那这些受访者他们最终选择了什么语言呐?
从上图可以看出,放弃 Go
语言的受访者们更多的选择了 Rust
、Python
和 Java
语言。
Rust
和Go
语言有互补的特性,因此如果Go
不能满足项目的功能需求时,Rust
是一个不错的选择。- 选择
Python
的主要原因是Python
具备良好的生态系统,这是目前Go
无法做到的。 - 使用
Java
语言主要是因为Go
缺少部分语言特性,1.18
版本中引入泛型来Go
的使用量可能会增加。
开发者对 Go 的满意度
与去年一致,调查表明 92%
的受访者对去年 Go
语言的使用感到非常满意或比较满意。
此外越来越多的受访者表示 Go
对于他们公司的成功提供了至关重要的帮助。
Go 的优先级
过去几年,调查中通常要求受访者对特定领域的满意度以及这些领域的重要性进行评分,官方利用这些调查结果来找出一些对受访者很重要但却不满意的领域。但调查结果发现大多数领域在重要性和满意度方面仅显示出微小的差异。
今年调查中,Go
官方设置了一个新问题,以探索确定特定领域工作优先级的替代方法。“假设您有 10
个 GopherCoins
可用于改进使用 Go
的以下方面。你将如何分配你的硬币”,结果显示,依赖管理和错误诊断部分收获了最多的 GopherCoins
数量,因此 2022
年,Go
官方会重点处理这两个领域。
学习 Go 语言
绝大多数受访者(88%
)认为使用 Go
语言开发效率特别高,85%
受访者也认为使用 Go
开发非常顺畅。
实践文档
一半的受访者希望能获得有关性能优化和项目目录结构最佳实践的指导。而且新的 Gophers
(使用 Go
不到 1
年)比更有经验的 Gophers
需要更多的指导。
如何学习一门新语言
大约一半的受访者表示在工作中学到一门新语言,但几乎同样多的人(45%
)表示在学校或者工作之外学习到新语言。
开发者工具和实践
与往年一样,绝大多数受访者表示在 Linux
和 maxOS
系统上使用 Go
语言,但随着时间的推移,在 Linux
进行 Go
开发的受访者比例略有下降。
部署平台
超过 90%
的受访者选择 Linux
作为部署平台。另外尽管 macOS
使用 Go
的开发者多于 Windows
系统,但他们更倾向于部署到 Windows
系统。
模糊测试
大多数受访者并不熟悉模糊测试或者仍然认为自己是模糊测试的新手,基于这一发现,Go
官方在 fuzzing
文档中除了解释 fuzzing
的细节之外,还详细解释了 fuzzing
的概念。
云计算
Go
在设计之初就考虑了现代分布式计算,今年 Go
官方希望能继续改善开发人员使用 Go
构建云服务的体验。调查显示将 Go
程序部署到全球三大云提供商(亚马逊网络服务、谷歌云平台和微软 Azure
)的受访者比例基本保持不变,而自有或公司拥有的服务器的本地部署继续减少。
从调查结果可以看出,部署到 AWS
和部署到托管 Kubernetes
平台的人数有所增加,部署到 VM
的用户比例有所下降。
新变化
此次调查最显著的变化是招募参与者的方式,以往几年,我们主要通过 Go
博客公布这项调查,同时在 Twitter
、Reddit
或 Hacker News
等各种社交渠道上发布。但此次调查除了传统渠道外,我们还使用 VS Code Go
插件随机选择用户,询问他们是否愿意参与调查。
我们可以看到几乎有三分之一的受访者来源于随机取样(插件),这部分受访者会对此次调查产生较大的影响。
更多新 Gophers
随机选择的样本中包含更高比例的新 Gophers
(使用 Go
不到一年的人)用户。
更多的 VS Code 用户
来源于 VS Code
插件的受访者中,有 91%
的受访者喜欢用 VS Code
开发 Go
语言,因此今年调查中 VS Code
的偏好值较高,但当我们去除掉插件部分的样本后,与去年的调查结果大致相似。 VS Code
使用者更偏向于使用 Windows
进行开发,因此 Windows
的偏好也略有增加。
结论
下面我们来总结一下 Go
开发者 2021
调查报告的部分关键要点:
- 此次调查的样本虽然有所变化,但大部分同比指标保持稳定。
- 开发者对
Go
的满意度仍然很高 - 四分之三的受访者在工作中使用
Go
,很多受访者每天都在使用Go
Go
团队将优先改进调试和依赖管理的工作流程
如果你想阅读完整的调查报告,请参考 go.dev/blog/survey…