Go 博客
Go 开发者调查 2020 年结果
感谢您的大力参与!
2020 年,我们再次获得了极大的参与度,共收到 9648 份回复,大约与 2019 年一样多。感谢您抽出时间为社区提供有关您使用 Go 经验的见解!
新的模块化调查设计
您可能会注意到一些问题的样本量 (“n=”) 比其他问题小。这是因为一些问题向所有人展示,而其他问题仅向随机选择的受访者子集展示。
亮点
- Go 在工作场所和企业中的使用正在扩展,76% 的受访者在工作中使用 Go,66% 的受访者表示Go 对其公司的成功至关重要。
- 总体满意度很高,92% 的受访者对使用 Go 表示满意。
- 大多数受访者在不到 3 个月的时间内就能在 Go 中获得生产力,其中 81% 的受访者表示在 Go 中感觉非常或极其高效。
- 受访者报告及时升级到最新 Go 版本,其中 76% 的受访者在 5 个月内完成升级。
- 使用 pkg.go.dev 的受访者 (91%) 在查找 Go 软件包方面比非用户 (82%) 更成功。
- 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 个“GopherCoin”(一种虚拟货币)的情况下愿意花费多少来确定编辑器的改进优先级。代码补全获得了每个受访者最高的平均 GopherCoin 数量。一半的受访者为前 4 个功能(代码补全、代码导航、编辑器性能和重构)提供了 10 个或更多 GopherCoin。
大多数受访者 (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%。在 5000 名或更多员工的组织中工作的受访者不太可能同意 (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 针对哪些平台。考虑到 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 构建云服务的开发人员体验。
- 全球三大云服务提供商(亚马逊网络服务、谷歌云平台和微软 Azure)在调查受访者中的使用率持续增长,而大多数其他提供商的使用率逐年下降。特别是 Azure 的使用率从 7% 显著增长到 12%。
- 部署到自有或公司拥有的服务器上的本地部署继续减少,成为最常见的部署目标。
将程序部署到 AWS 和 Azure 的受访者在部署到托管的 Kubernetes 平台方面有所增加,目前分别达到 40% 和 54%。Azure 将 Go 程序部署到虚拟机的用户比例大幅下降,容器使用率则从 18% 增长到 25%。与此同时,GCP(其受访者报告托管 Kubernetes 使用率的比例已经很高)在部署到无服务器 Cloud Run 方面有所增长,从 10% 增长到 17%。
总体而言,大多数受访者对在所有三大主要云服务提供商上使用 Go 都感到满意,并且这些数据与去年相比在统计上没有变化。受访者报告了对 AWS(82% 满意)和 GCP(80% 满意)的 Go 开发具有相似的满意度水平。Azure 收到了较低的满意度评分(58% 满意),自由文本回复中经常提到需要改进 Azure 的 Go SDK 和 Azure 函数的 Go 支持。
痛点
受访者表示无法更多地使用 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 相关问题的五大资源。去年我们只要求列出前三名,因此结果无法直接比较,但是 StackOverflow 仍然是最受欢迎的资源,占比 65%。阅读源代码(57%)仍然是另一种受欢迎的资源,而对 godoc.org 的依赖(39%)则大幅下降。包发现网站 pkg.go.dev 是今年新增的列表,是 32% 的受访者的首选资源。使用 pkg.go.dev 的受访者更有可能同意他们能够快速找到所需的 Go 包/库:pkg.go.dev 用户为 91%,其他所有人为 82%。
多年来,不参加任何与 Go 相关的活动的受访者比例一直在上升。由于新冠肺炎疫情的影响,今年我们在 Go 活动方面修改了问题,发现超过四分之一的受访者比往年花费更多的时间在 Go 在线渠道上,14% 的受访者参加了虚拟 Go 聚会,是去年的两倍。参加虚拟活动的受访者中,64% 表示这是他们的第一次虚拟活动。
我们发现 12% 的受访者属于传统意义上的弱势群体(例如,种族、性别认同等),与 2019 年相同,2% 的受访者为女性,少于 2019 年(3%)。与弱势群体认同的受访者对“我在 Go 社区中感到受欢迎”这一说法的不同意率更高(10% 对 4%),而不是那些不与弱势群体认同的受访者。这些问题使我们能够衡量社区的多样性,并突出外展和发展的机会。
今年,我们增加了一个关于辅助技术使用情况的问题,发现 8% 的受访者正在使用某种形式的辅助技术。最常用的辅助技术是对比度或颜色设置(2%)。这提醒我们,我们的用户中有残障人士,并有助于指导我们对 Go 团队管理的网站的一些设计决策。
Go 团队重视多样性和包容性,不仅因为它是一件正确的事情,而且因为多元的声音可以照亮我们的盲点,并最终造福所有用户。我们询问敏感信息(包括性别和传统意义上的弱势群体)的方式已根据数据隐私法规进行了更改,我们希望将来能够使这些问题,特别是围绕性别多样性的问题,更具包容性。
结论
感谢您与我们一起回顾 2020 年开发者调查的结果!了解开发人员的体验和挑战有助于我们衡量我们的进展并指导 Go 的未来发展。再次感谢所有参与本次调查的人员——没有你们,我们不可能做到这一点。我们希望明年还能见到您!
下一篇文章:模糊测试已准备好进入 Beta 阶段
上一篇文章:上下文和结构体
博客索引