Go 博客

2020 年 Go 开发者调查结果

Alice Merrick
2021 年 3 月 9 日

感谢大家积极参与!

2020 年,我们再次获得了大量反馈,共有 9,648 份回复,与 2019 年的回复数量 大致相当。感谢您抽出宝贵时间,为社区提供关于使用 Go 经验的宝贵见解!

新的模块化调查设计

您可能会注意到,有些问题的样本量(“n=”)小于其他问题。这是因为有些问题向所有受访者展示,而有些问题仅向随机选择的一部分受访者展示。

亮点

我们听取了谁的意见?

人口统计学问题有助于我们区分哪些年度差异可能源于受访者构成变化,而不是情绪或行为的变化。由于我们的人口统计学特征与去年相似,我们可以相当确信,其他年度变化并非主要由于人口统计学变化。

例如,组织规模、开发者经验和行业分布从 2019 年到 2020 年基本保持不变。

Bar chart of organization size for 2019 to 2020 where the majority have fewer than 1000 employees Bar chart of years of professional experience for 2019 to 2020 with the majority having 3 to 10 years of experience Bar chart of organization industries for 2019 to 2020 with the majority in Technology

近一半(48%)的受访者使用 Go 不足两年。2020 年,使用 Go 不到一年的受访者回复数量有所减少。

Bar chart of years of experience using Go

大多数人表示他们在工作(76%)和工作之外(62%)使用 Go。每年使用 Go 的受访者比例都在呈上升趋势。

Bar chart where Go is being used at work or outside of work

今年我们引入了一个关于主要工作职责的新问题。我们发现 70% 的受访者的主要职责是开发软件和应用程序,但有相当一部分人(10%)负责设计 IT 系统和架构。

Primary job responsibilities

与往年一样,我们发现大多数受访者不是 Go 开源项目的频繁贡献者,75% 的人表示他们“很少”或“从不”贡献。

How often respondents contribute to open source projects written in Go from 2017 to 2020 where results remain about the same each year and only 7% contribute daily

开发者工具和实践

与往年一样,绝大多数调查受访者报告在 Linux (63%) 和 macOS (55%) 系统上使用 Go。主要在 Linux 上进行开发的受访者比例似乎随着时间的推移略有下降。

Primary operating system from 2017 to 2020

编辑器偏好似乎首次稳定下来:VS Code 仍然是最受欢迎的编辑器 (41%),GoLand 位居第二 (35%)。这两个编辑器占了总回复的 76%,与其他偏好相比,它们没有像往年那样持续下降。

Editor preferences from 2017 to 2020

今年,我们要求受访者通过如果他们有 100 枚“GopherCoins”(一种虚构货币)的话,他们愿意为改进编辑器支付多少,来对编辑器改进进行排序。代码补全收到了每个受访者平均最高的 GopherCoins 数量。一半的受访者为排名前四的功能(代码补全、代码导航、编辑器性能和重构)提供了 10 枚或更多硬币。

Bar char of average number of GopherCoins spent per respondent

大多数受访者(63%)花费 10-30% 的时间进行重构,这表明这是一个常见的任务,我们希望调查改进它的方法。这也解释了为什么重构支持是最受资助的编辑器改进之一。

Bar chart of time spent refactoring

去年我们询问了具体的开发技术,发现近 90% 的受访者使用文本日志进行调试,所以今年我们增加了一个后续问题来找出原因。结果显示,43% 的人使用它是因为它允许他们在不同的语言中使用相同的调试策略,42% 的人更喜欢使用文本日志而不是其他调试技术。然而,27% 的人不知道如何开始使用 Go 的调试工具,24% 的人从未尝试使用 Go 的调试工具,因此在可发现性、可用性和文档方面,有改进调试器工具的机会。此外,由于四分之一的受访者从未尝试使用调试工具,痛点可能被低报了。

对 Go 的情绪

这是我们第一次询问总体满意度。92% 的受访者表示在过去一年中使用 Go 时感到非常满意或比较满意。

Bar chart of overall satisfaction on a 5 points scale from very dissatisfied to very satisfied

这是我们第三年询问“您会推荐…”的 净推荐值 (NPS) 问题。今年的 NPS 结果为 61(68% 的“推荐者”减去 6% 的“批评者”),与 2019 年和 2018 年相比在统计上没有变化。

Stacked bar chart of promoters, passives, and detractors

与往年类似,91% 的受访者表示他们希望在下一个新项目中使用 Go。89% 的人表示 Go 对他们的团队工作得很好。今年,我们看到认为 Go 对公司成功至关重要的受访者比例有所增加,从 2019 年的 59% 增加到 2020 年的 66%。在拥有 5,000 名或更多员工的组织工作的受访者不太可能同意(63%),而规模较小的组织的受访者更有可能同意(73%)。

Bar chart of agreement with statements I would prefer to use Go for my next project, Go is working well for me team, 89%, and Go is critical to my company's success

与去年一样,我们要求受访者根据满意度和重要性对 Go 开发的特定领域进行评分。使用云服务、调试和模块(去年被强调为改进机会的领域)的满意度有所提高,而大多数重要性分数保持不变。我们还引入了几个新主题:API 和 Web 框架。我们看到 Web 框架的满意度低于其他领域(64%)。它对大多数当前用户来说并没有那么重要(只有 28% 的受访者认为它非常重要或极其重要),但它可能是潜在 Go 开发者的一个缺失的关键功能。

Bar chart of satisfaction with aspects of Go from 2019 to 2020, showing highest satisfaction with build speed, reliability and using concurrency and lowest with web frameworks

81% 的受访者表示在使用 Go 时感到非常高效或极其高效。大型组织的受访者比小型组织的受访者更有可能感到极其高效。

Stacked bar chart of perceived productivity on 5 point scale from not all to extremely productive

我们通过传闻得知 Go 很容易快速上手。我们询问了至少觉得自己有一定生产力水平的受访者,他们花了多长时间才达到这种水平。93% 的人表示不到一年,大多数人在 3 个月内就感到有生产力了。

Bar chart of length of time before feeling productive

尽管与去年大致相同,“我觉得在 Go 社区中很受欢迎”这一陈述的受访者比例似乎随着时间的推移呈下降趋势,或者至少没有像其他领域那样保持上升趋势。

我们还看到,认为 Go 项目领导层理解他们需求的受访者比例有了显著的年度增长(63%)。

所有这些结果都显示出一种与 Go 经验增加相关的更高程度的认同模式,大约从两年开始。换句话说,受访者使用 Go 的时间越长,他们就越有可能同意这些陈述。

Bar chart showing agreement with statements I feel welcome in the Go community, I am confident in the Go leadership, I feel welcome to contribute, The Go project leadership understands my needs, and The process of contributing to the Go project is clear to me

我们提出了一个开放式文本问题,询问我们可以做些什么来使 Go 社区更受欢迎,其中最常见的建议(21%)与不同形式或改进/添加的学习资源和文档有关。

Bar chart of recommendations for improving the welcomeness of the Go community

使用 Go

构建 API/RPC 服务 (74%) 和 CLI (65%) 仍然是 Go 最常见的用途。与去年相比,我们没有看到任何显著变化,去年我们引入了选项顺序的随机化。(2019 年之前,列表开头的选项被不成比例地选中。)我们还按组织规模进行了细分,发现受访者在大型企业或小型组织中对 Go 的使用方式相似,尽管大型组织不太可能使用 Go 来返回 HTML 的 Web 服务。

Bar chart of Go use cases from 2019 to 2020 including API or RPC services, CLIs, frameworks, web services, automation, agents and daemons, data processing, GUIs, games and mobile apps

今年,我们对受访者在家中和工作中用 Go 编写的软件类型有了更好的了解。尽管返回 HTML 的 Web 服务是第四个最常见的用例,但这主要归因于非工作相关的使用。比返回 HTML 的 Web 服务,更多受访者使用 Go 进行自动化/脚本、代理和守护进程以及数据处理。最不常见的用途(桌面/GUI 应用、游戏和移动应用)中,有更高比例是在工作之外编写的。

Stacked bar charts of proportion of use case is at work, outside of work, or both

另一项新问题是询问受访者对每种用例的满意度。CLI 的满意度最高,85% 的受访者表示在使用 Go 开发 CLI 时非常、中度或略微满意。Go 的常见用途往往具有较高的满意度分数,但满意度和受欢迎程度并不完全对应。例如,代理和守护进程的满意度比例排名第二,但使用量排名第六。

Bar chart of satisfaction with each use case

其他后续问题探索了不同的用例,例如,受访者为他们的 CLI 目标平台。考虑到 Go 开发者大量使用 Linux 和 macOS,以及高 Linux 云使用率,Linux (93%) 和 macOS (59%) 的高代表性并不令人意外,但即使是 Windows 也有近三分之一的 CLI 开发者将其作为目标。

Bar chart of platforms being targeted for CLIs

对 Go 数据处理的进一步研究表明,Kafka 是唯一被广泛采用的引擎,但大多数受访者表示他们使用 Go 配合自定义数据处理引擎。

Bar chart of data processing engines used by those who use Go for data processing

我们还询问了受访者使用 Go 的较大领域。迄今为止最常见的领域是 Web 开发 (68%),但其他常见领域包括数据库 (46%)、DevOps (42%)、网络编程 (41%) 和系统编程 (40%)。

Bar chart of the kind of work where Go is being used

与去年类似,我们发现 76% 的受访者评估当前 Go 版本是否适用于生产环境,但今年我们调整了时间尺度,发现 60% 的人在发布前或发布后 2 个月内开始评估新版本。这凸显了平台即服务提供商快速支持 Go 新稳定版本的重要性。

Bar chart of how soon respondents begin evaluating a new Go release

模块

今年我们发现 Go 模块的采用率接近普遍,并且仅将模块用于包管理的受访者比例显著增加。96% 的受访者表示他们将模块用于包管理,高于去年的 89%。87% 的受访者表示他们*仅*将模块用于包管理,高于去年的 71%。与此同时,其他包管理工具的使用有所下降。

Bar chart of methods used for Go package management

与去年相比,模块的满意度也有所提高。77% 的受访者表示对模块非常、中度或略微满意,而 2019 年为 68%。

Stacked bar chart of satisfaction with using modules on a 7 point scale from very dissatisfied to very satisfied

官方文档

大多数受访者表示他们在官方文档方面遇到困难。62% 的受访者难以找到足够的信息来完全实现应用程序的某个功能,超过三分之一的人在开始之前从未做过的事情时遇到困难。

Bar chart of struggles using official Go documentation

官方文档中最具挑战性的领域是使用模块和 CLI 开发,20% 的受访者认为模块文档帮助不大或完全无用,而 CLI 开发相关的文档则为 16%。

Stacked bar charts on helpfulness of specific areas of documentation including using modules, CLI tool development, error handling, web service development, data access, concurrency and file input/output, rated on a 5 point scale from not at all to very helpful

Go 在云端

Go 在设计之初就考虑了现代分布式计算,我们希望继续改进使用 Go 构建云服务的开发者体验。

  • 三大全球云提供商(Amazon Web Services、Google Cloud Platform 和 Microsoft Azure)的使用率在调查受访者中持续增长,而其他大多数提供商的使用率每年都在下降。Azure 的增长尤为显著,从 7% 增至 12%。
  • 部署到自营或公司拥有的服务器的本地部署继续作为最常见的部署目标而下降。
Bar chart of cloud providers used to deploy Go programs where AWS is the most common at 44%

部署到 AWS 和 Azure 的受访者在使用托管 Kubernetes 平台方面有所增加,目前分别为 40% 和 54%。Azure 将 Go 程序部署到 VM 的用户比例显著下降,容器使用量有所增长,从 18% 增至 25%。与此同时,GCP(其托管 Kubernetes 使用率已经很高)在部署到无服务器 Cloud Run 方面有所增长,从 10% 增至 17%。

Bar charts of proportion of services being used with each provider

总体而言,大多数受访者对在这三大主要云提供商上使用 Go 感到满意,并且与去年相比,这些数字在统计上没有变化。受访者报告了对 AWS (82% 满意) 和 GCP (80%) 的 Go 开发的相似满意度。Azure 的满意度得分较低(58% 满意),自由文本回复通常提到需要改进 Azure 的 Go SDK 和 Go 对 Azure Functions 的支持。

Stacked bar chart of satisfaction with using Go with AWS, GCP and Azure

痛点

受访者表示无法更多地使用 Go 的主要原因仍然是:在另一个语言的项目上工作 (54%)、在一个偏好使用另一种语言的团队工作 (34%),以及 Go 本身缺乏关键功能 (26%)。

今年我们引入了一个新选项:“我已经处处使用 Go 了”,这样受访者就可以选择退出那些不限制他们使用 Go 的选项。这显著降低了所有其他选项的选择率,但并未改变它们的相对顺序。我们还引入了“Go 缺乏关键框架”的选项。

如果我们只看选择不使用 Go 原因的受访者,我们可以更好地了解年度趋势。在另一种现有语言的项目上工作以及项目/团队/领导偏好另一种语言的比例正在随着时间的推移而下降。

Bar charts of reasons preventing respondents from using Go more

在表示 Go 缺乏他们所需语言功能的 26% 的受访者中,88% 的人将泛型选为关键缺失功能。其他关键缺失功能包括:更好的错误处理 (58%)、空值安全 (44%)、函数式编程功能 (42%) 和更强大/扩展的类型系统 (41%)。

需要明确的是,这些数字来自那些表示如果 Go 不缺少他们所需的一个或多个关键功能,他们就可以更多地使用 Go 的受访者子集,而不是整个调查受访者群体。从这个角度来看,18% 的受访者因为缺少泛型而无法使用 Go。

Bar chart of missing critical features

受访者报告在使用 Go 时遇到的最大挑战仍然是 Go 缺乏泛型 (18%),而模块/包管理和学习曲线/最佳实践/文档方面的问题各占 13%。

Bar chart of biggest challenges respondents face when using Go

Go 社区

今年我们询问了受访者回答 Go 相关问题的首选 5 个资源。去年我们只询问了前 3 个,所以结果不具有直接可比性,但 StackOverflow 仍然是最受欢迎的资源,占 65%。阅读源代码 (57%) 仍然是另一个受欢迎的资源,而对 godoc.org 的依赖(39%)已显著下降。包发现网站 pkg.go.dev 今年首次出现在列表中,是 32% 受访者的首选资源。使用 pkg.go.dev 的受访者更有可能认同他们能够快速找到所需的 Go 包/库:pkg.go.dev 用户为 91%,其他人为 82%。

Bar chart of top 5 resources respondents use to answer Go-related questions

多年来,不参加任何 Go 相关活动的受访者比例一直在上升。由于 COVID-19,今年我们修改了关于 Go 活动的问题,发现超过四分之一的受访者比往年花更多时间在在线 Go 频道,14% 的人参加了虚拟 Go 会议,是去年的一倍。参加虚拟活动的受访者中有 64% 表示这是他们第一次参加虚拟活动。

Bar chart of respondents participation in online channels and events

我们发现 12% 的受访者认同传统意义上的代表性不足的群体(例如,种族、性别认同等),与 2019 年相同,2% 的人认同为女性,低于 2019 年(3%)。认同代表性不足群体的受访者与“我觉得在 Go 社区中很受欢迎”这一陈述的“不同意”比例更高(10% 对比 4%),而不是不认同代表性不足的群体的受访者。这些问题使我们能够衡量社区中的多样性,并突出外展和增长的机会。

Bar chart of underrepresented groups Bar chart of those who identify as women Bar chart of welcomeness of underrepresented groups

今年我们增加了一个关于辅助技术使用情况的额外问题,发现 8% 的受访者正在使用某种形式的辅助技术。最常用的辅助技术是对比度或颜色设置(2%)。这提醒我们有用户有可访问性需求,并有助于指导 Go 团队管理的网站的设计决策。

Bar chart of assistive technology usage

Go 团队重视多样性和包容性,不仅仅是因为这是正确的事情,而是因为多元化的声音可以照亮我们的盲点,并最终使所有用户受益。我们收集敏感信息(包括性别和代表性不足的群体)的方式已根据数据隐私法规进行了更改,我们希望将来能使这些问题(特别是性别多样性方面)更具包容性。

结论

感谢您加入我们一起回顾 2020 年开发者调查结果!了解开发者的经验和挑战有助于我们衡量进展并指导 Go 的未来。再次感谢所有为本次调查做出贡献的人——没有你们,我们不可能做到。希望明年再见!

下一篇文章:模糊测试已准备好进入 Beta 版
上一篇文章:Context 和 Struct
博客索引