Go 博客
2020 年 Go 开发者调查结果
感谢大家积极参与!
2020 年,我们再次获得了大量反馈,共有 9,648 份回复,与 2019 年的回复数量 大致相当。感谢您抽出宝贵时间,为社区提供关于使用 Go 经验的宝贵见解!
新的模块化调查设计
您可能会注意到,有些问题的样本量(“n=”)小于其他问题。这是因为有些问题向所有受访者展示,而有些问题仅向随机选择的一部分受访者展示。
亮点
- Go 在工作场所和企业中的使用正在不断扩大,76% 的受访者 在工作中使用 Go,66% 的受访者表示 Go 对他们公司的成功至关重要。
- 总体满意度很高,92% 的受访者对使用 Go 感到满意。(总体满意度)
- 大多数 受访者认为自己在 3 个月内就能在 Go 中高效工作,81% 的受访者表示在 Go 中非常高效或极其高效。
- 受访者表示 会及时升级到最新的 Go 版本,76% 的受访者在发布后的 5 个月内完成升级。
- 使用 pkg.go.dev 的用户(91%)比非用户(82%)更容易找到 Go 包。
- Go 模块的采用率几乎是普遍的,满意度为 77%,但受访者也强调了改进文档的需求。
- Go 持续广泛用于 API、CLI、Web、DevOps 和数据处理。
- 代表性不足的群体 在社区中往往感觉不那么受欢迎。
我们听取了谁的意见?
人口统计学问题有助于我们区分哪些年度差异可能源于受访者构成变化,而不是情绪或行为的变化。由于我们的人口统计学特征与去年相似,我们可以相当确信,其他年度变化并非主要由于人口统计学变化。
例如,组织规模、开发者经验和行业分布从 2019 年到 2020 年基本保持不变。
近一半(48%)的受访者使用 Go 不足两年。2020 年,使用 Go 不到一年的受访者回复数量有所减少。
大多数人表示他们在工作(76%)和工作之外(62%)使用 Go。每年使用 Go 的受访者比例都在呈上升趋势。
今年我们引入了一个关于主要工作职责的新问题。我们发现 70% 的受访者的主要职责是开发软件和应用程序,但有相当一部分人(10%)负责设计 IT 系统和架构。
与往年一样,我们发现大多数受访者不是 Go 开源项目的频繁贡献者,75% 的人表示他们“很少”或“从不”贡献。
开发者工具和实践
与往年一样,绝大多数调查受访者报告在 Linux (63%) 和 macOS (55%) 系统上使用 Go。主要在 Linux 上进行开发的受访者比例似乎随着时间的推移略有下降。
编辑器偏好似乎首次稳定下来:VS Code 仍然是最受欢迎的编辑器 (41%),GoLand 位居第二 (35%)。这两个编辑器占了总回复的 76%,与其他偏好相比,它们没有像往年那样持续下降。
今年,我们要求受访者通过如果他们有 100 枚“GopherCoins”(一种虚构货币)的话,他们愿意为改进编辑器支付多少,来对编辑器改进进行排序。代码补全收到了每个受访者平均最高的 GopherCoins 数量。一半的受访者为排名前四的功能(代码补全、代码导航、编辑器性能和重构)提供了 10 枚或更多硬币。
大多数受访者(63%)花费 10-30% 的时间进行重构,这表明这是一个常见的任务,我们希望调查改进它的方法。这也解释了为什么重构支持是最受资助的编辑器改进之一。
去年我们询问了具体的开发技术,发现近 90% 的受访者使用文本日志进行调试,所以今年我们增加了一个后续问题来找出原因。结果显示,43% 的人使用它是因为它允许他们在不同的语言中使用相同的调试策略,42% 的人更喜欢使用文本日志而不是其他调试技术。然而,27% 的人不知道如何开始使用 Go 的调试工具,24% 的人从未尝试使用 Go 的调试工具,因此在可发现性、可用性和文档方面,有改进调试器工具的机会。此外,由于四分之一的受访者从未尝试使用调试工具,痛点可能被低报了。
对 Go 的情绪
这是我们第一次询问总体满意度。92% 的受访者表示在过去一年中使用 Go 时感到非常满意或比较满意。
这是我们第三年询问“您会推荐…”的 净推荐值 (NPS) 问题。今年的 NPS 结果为 61(68% 的“推荐者”减去 6% 的“批评者”),与 2019 年和 2018 年相比在统计上没有变化。
与往年类似,91% 的受访者表示他们希望在下一个新项目中使用 Go。89% 的人表示 Go 对他们的团队工作得很好。今年,我们看到认为 Go 对公司成功至关重要的受访者比例有所增加,从 2019 年的 59% 增加到 2020 年的 66%。在拥有 5,000 名或更多员工的组织工作的受访者不太可能同意(63%),而规模较小的组织的受访者更有可能同意(73%)。
与去年一样,我们要求受访者根据满意度和重要性对 Go 开发的特定领域进行评分。使用云服务、调试和模块(去年被强调为改进机会的领域)的满意度有所提高,而大多数重要性分数保持不变。我们还引入了几个新主题:API 和 Web 框架。我们看到 Web 框架的满意度低于其他领域(64%)。它对大多数当前用户来说并没有那么重要(只有 28% 的受访者认为它非常重要或极其重要),但它可能是潜在 Go 开发者的一个缺失的关键功能。
81% 的受访者表示在使用 Go 时感到非常高效或极其高效。大型组织的受访者比小型组织的受访者更有可能感到极其高效。
我们通过传闻得知 Go 很容易快速上手。我们询问了至少觉得自己有一定生产力水平的受访者,他们花了多长时间才达到这种水平。93% 的人表示不到一年,大多数人在 3 个月内就感到有生产力了。
尽管与去年大致相同,“我觉得在 Go 社区中很受欢迎”这一陈述的受访者比例似乎随着时间的推移呈下降趋势,或者至少没有像其他领域那样保持上升趋势。
我们还看到,认为 Go 项目领导层理解他们需求的受访者比例有了显著的年度增长(63%)。
所有这些结果都显示出一种与 Go 经验增加相关的更高程度的认同模式,大约从两年开始。换句话说,受访者使用 Go 的时间越长,他们就越有可能同意这些陈述。
我们提出了一个开放式文本问题,询问我们可以做些什么来使 Go 社区更受欢迎,其中最常见的建议(21%)与不同形式或改进/添加的学习资源和文档有关。
使用 Go
构建 API/RPC 服务 (74%) 和 CLI (65%) 仍然是 Go 最常见的用途。与去年相比,我们没有看到任何显著变化,去年我们引入了选项顺序的随机化。(2019 年之前,列表开头的选项被不成比例地选中。)我们还按组织规模进行了细分,发现受访者在大型企业或小型组织中对 Go 的使用方式相似,尽管大型组织不太可能使用 Go 来返回 HTML 的 Web 服务。
今年,我们对受访者在家中和工作中用 Go 编写的软件类型有了更好的了解。尽管返回 HTML 的 Web 服务是第四个最常见的用例,但这主要归因于非工作相关的使用。比返回 HTML 的 Web 服务,更多受访者使用 Go 进行自动化/脚本、代理和守护进程以及数据处理。最不常见的用途(桌面/GUI 应用、游戏和移动应用)中,有更高比例是在工作之外编写的。
另一项新问题是询问受访者对每种用例的满意度。CLI 的满意度最高,85% 的受访者表示在使用 Go 开发 CLI 时非常、中度或略微满意。Go 的常见用途往往具有较高的满意度分数,但满意度和受欢迎程度并不完全对应。例如,代理和守护进程的满意度比例排名第二,但使用量排名第六。
其他后续问题探索了不同的用例,例如,受访者为他们的 CLI 目标平台。考虑到 Go 开发者大量使用 Linux 和 macOS,以及高 Linux 云使用率,Linux (93%) 和 macOS (59%) 的高代表性并不令人意外,但即使是 Windows 也有近三分之一的 CLI 开发者将其作为目标。
对 Go 数据处理的进一步研究表明,Kafka 是唯一被广泛采用的引擎,但大多数受访者表示他们使用 Go 配合自定义数据处理引擎。
我们还询问了受访者使用 Go 的较大领域。迄今为止最常见的领域是 Web 开发 (68%),但其他常见领域包括数据库 (46%)、DevOps (42%)、网络编程 (41%) 和系统编程 (40%)。
与去年类似,我们发现 76% 的受访者评估当前 Go 版本是否适用于生产环境,但今年我们调整了时间尺度,发现 60% 的人在发布前或发布后 2 个月内开始评估新版本。这凸显了平台即服务提供商快速支持 Go 新稳定版本的重要性。
模块
今年我们发现 Go 模块的采用率接近普遍,并且仅将模块用于包管理的受访者比例显著增加。96% 的受访者表示他们将模块用于包管理,高于去年的 89%。87% 的受访者表示他们*仅*将模块用于包管理,高于去年的 71%。与此同时,其他包管理工具的使用有所下降。
与去年相比,模块的满意度也有所提高。77% 的受访者表示对模块非常、中度或略微满意,而 2019 年为 68%。
官方文档
大多数受访者表示他们在官方文档方面遇到困难。62% 的受访者难以找到足够的信息来完全实现应用程序的某个功能,超过三分之一的人在开始之前从未做过的事情时遇到困难。
官方文档中最具挑战性的领域是使用模块和 CLI 开发,20% 的受访者认为模块文档帮助不大或完全无用,而 CLI 开发相关的文档则为 16%。
Go 在云端
Go 在设计之初就考虑了现代分布式计算,我们希望继续改进使用 Go 构建云服务的开发者体验。
- 三大全球云提供商(Amazon Web Services、Google Cloud Platform 和 Microsoft Azure)的使用率在调查受访者中持续增长,而其他大多数提供商的使用率每年都在下降。Azure 的增长尤为显著,从 7% 增至 12%。
- 部署到自营或公司拥有的服务器的本地部署继续作为最常见的部署目标而下降。
部署到 AWS 和 Azure 的受访者在使用托管 Kubernetes 平台方面有所增加,目前分别为 40% 和 54%。Azure 将 Go 程序部署到 VM 的用户比例显著下降,容器使用量有所增长,从 18% 增至 25%。与此同时,GCP(其托管 Kubernetes 使用率已经很高)在部署到无服务器 Cloud Run 方面有所增长,从 10% 增至 17%。
总体而言,大多数受访者对在这三大主要云提供商上使用 Go 感到满意,并且与去年相比,这些数字在统计上没有变化。受访者报告了对 AWS (82% 满意) 和 GCP (80%) 的 Go 开发的相似满意度。Azure 的满意度得分较低(58% 满意),自由文本回复通常提到需要改进 Azure 的 Go SDK 和 Go 对 Azure Functions 的支持。
痛点
受访者表示无法更多地使用 Go 的主要原因仍然是:在另一个语言的项目上工作 (54%)、在一个偏好使用另一种语言的团队工作 (34%),以及 Go 本身缺乏关键功能 (26%)。
今年我们引入了一个新选项:“我已经处处使用 Go 了”,这样受访者就可以选择退出那些不限制他们使用 Go 的选项。这显著降低了所有其他选项的选择率,但并未改变它们的相对顺序。我们还引入了“Go 缺乏关键框架”的选项。
如果我们只看选择不使用 Go 原因的受访者,我们可以更好地了解年度趋势。在另一种现有语言的项目上工作以及项目/团队/领导偏好另一种语言的比例正在随着时间的推移而下降。
在表示 Go 缺乏他们所需语言功能的 26% 的受访者中,88% 的人将泛型选为关键缺失功能。其他关键缺失功能包括:更好的错误处理 (58%)、空值安全 (44%)、函数式编程功能 (42%) 和更强大/扩展的类型系统 (41%)。
需要明确的是,这些数字来自那些表示如果 Go 不缺少他们所需的一个或多个关键功能,他们就可以更多地使用 Go 的受访者子集,而不是整个调查受访者群体。从这个角度来看,18% 的受访者因为缺少泛型而无法使用 Go。
受访者报告在使用 Go 时遇到的最大挑战仍然是 Go 缺乏泛型 (18%),而模块/包管理和学习曲线/最佳实践/文档方面的问题各占 13%。
Go 社区
今年我们询问了受访者回答 Go 相关问题的首选 5 个资源。去年我们只询问了前 3 个,所以结果不具有直接可比性,但 StackOverflow 仍然是最受欢迎的资源,占 65%。阅读源代码 (57%) 仍然是另一个受欢迎的资源,而对 godoc.org 的依赖(39%)已显著下降。包发现网站 pkg.go.dev 今年首次出现在列表中,是 32% 受访者的首选资源。使用 pkg.go.dev 的受访者更有可能认同他们能够快速找到所需的 Go 包/库:pkg.go.dev 用户为 91%,其他人为 82%。
多年来,不参加任何 Go 相关活动的受访者比例一直在上升。由于 COVID-19,今年我们修改了关于 Go 活动的问题,发现超过四分之一的受访者比往年花更多时间在在线 Go 频道,14% 的人参加了虚拟 Go 会议,是去年的一倍。参加虚拟活动的受访者中有 64% 表示这是他们第一次参加虚拟活动。
我们发现 12% 的受访者认同传统意义上的代表性不足的群体(例如,种族、性别认同等),与 2019 年相同,2% 的人认同为女性,低于 2019 年(3%)。认同代表性不足群体的受访者与“我觉得在 Go 社区中很受欢迎”这一陈述的“不同意”比例更高(10% 对比 4%),而不是不认同代表性不足的群体的受访者。这些问题使我们能够衡量社区中的多样性,并突出外展和增长的机会。
今年我们增加了一个关于辅助技术使用情况的额外问题,发现 8% 的受访者正在使用某种形式的辅助技术。最常用的辅助技术是对比度或颜色设置(2%)。这提醒我们有用户有可访问性需求,并有助于指导 Go 团队管理的网站的设计决策。
Go 团队重视多样性和包容性,不仅仅是因为这是正确的事情,而是因为多元化的声音可以照亮我们的盲点,并最终使所有用户受益。我们收集敏感信息(包括性别和代表性不足的群体)的方式已根据数据隐私法规进行了更改,我们希望将来能使这些问题(特别是性别多样性方面)更具包容性。
结论
感谢您加入我们一起回顾 2020 年开发者调查结果!了解开发者的经验和挑战有助于我们衡量进展并指导 Go 的未来。再次感谢所有为本次调查做出贡献的人——没有你们,我们不可能做到。希望明年再见!
下一篇文章:模糊测试已准备好进入 Beta 版
上一篇文章:Context 和 Struct
博客索引