Go 博客

2021 年 Go 开发者调查结果

Alice Merrick
2022 年 4 月 19 日

衷心感谢社区的积极响应!

2021 年,我们于 10 月 26 日至 11 月 16 日进行了 Go 开发者调查,共收到 11,840 份回复,创下了我们六年开展调查以来的最高参与人数!感谢您抽出宝贵时间,分享您使用 Go 的经验,为社区提供宝贵的见解。

亮点

  • 大多数回复与往年一致。例如,Go 的满意度仍然很高,达到 92%,75% 的受访者在工作中使用 Go。
  • 今年我们随机抽取了一些使用 Go VS Code 插件的参与者,这导致了受访者构成发生了一些变化。
  • 缺少关键库、语言特性和基础设施是使用 Go 的最常见障碍。(注:本次调查在 Go 1.18 发布泛型之前进行,泛型是排名第一的缺失功能)
  • 受访者希望优先改进调试和依赖管理。
  • 使用模块时最大的挑战涉及版本控制、使用私有仓库和多模块工作流程。(注:本次调查在 Go 1.18 之前进行,Go 1.18 引入了工作区以解决许多这些问题)。
  • 81% 的受访者对Go 项目的长期发展方向充满信心

我们听取了谁的意见?

我们的用户画像多年来一直保持稳定(查看 2020 年结果)。与往年一致,Go 主要用于科技行业。70% 的受访者是软件开发者,少数在 IT 或 DevOps 领域工作,76% 的受访者表示他们在工作中使用 Go 进行编程。受访者所在行业的柱状图 显示 Go 在工作中比工作外使用更普遍的柱状图 Go 的用途柱状图,其中 API/RPC 服务和 CLI 应用最常见

2021 年的一些新用户画像

  • 大多数受访者将其组织描述为企业或中小型企业,约四分之一将其组织描述为初创企业。咨询公司和公共机构则不太常见。
  • 绝大多数受访者在不足十人的团队中工作。
  • 超过一半 (55%) 的受访者每天在工作中使用 Go。受访者在工作之外使用 Go 的频率较低。
Bar chart of organization type where enterprise is the most common response Bar chart of team size where 2 to 5 is the most common size Frequency of using Go at work versus outside of work where using Go at work is most often on a daily basis and outside of work is less common and most often on a weekly basis

性别认同

我们在调查中询问性别认同,因为它能让我们了解调查结果代表的人群,并为衡量社区包容性增加一个维度。Go 团队重视多样性和包容性,不仅因为这是正确的做法,还因为不同的声音能帮助我们做出更好的决策。今年我们重新措辞了性别认同问题,以更好地包含其他性别身份。与往年一样,认为自己是女性的比例大致相同(2%)。随机抽样组也是如此,这表明这不仅仅是抽样造成的。显示受访者性别认同的柱状图,其中 92% 的受访者认同自己是男性

辅助技术

今年我们再次发现约 8% 的受访者正在使用某种形式的辅助技术。大多数挑战涉及对 Go 相关网站或其代码编辑器中更高对比度主题和更大字体大小的需求;我们计划在今年晚些时候根据网站反馈采取行动。这些无障碍需求是我们所有人在为 Go 生态系统贡献时都应该牢记的。

深入了解 Go 采用面临的挑战

今年我们修订了问题,以便针对实际未采用 Go 的情况及其原因。首先,我们询问受访者在去年是否曾将 Go 与其他语言进行过评估。43% 的受访者表示他们曾评估过切换到 Go、从 Go 切换出去,或者在没有现有语言的情况下采用 Go。这些评估中,80% 主要出于商业原因。

Chart showing proportion of respondents who evaluated Go against another language in the last year

我们预期 Go 最常见的用例会是评估 Go 的开发者最常见的预期用途。API/RPC 服务是迄今为止最常见的用途,但令人惊讶的是,数据处理是第二常见的预期用例。

Chart showing the kind application they considered using Go

在评估 Go 的受访者中,75% 最终使用了 Go。(当然,由于几乎所有调查受访者都表示使用 Go,我们很可能没有听到那些评估了 Go 但决定不使用它的开发者的声音。)

Chart showing proportion who used Go compared to those who stayed with the current language or chose another language

对于那些评估了 Go 但没有使用它的受访者,我们接着询问是什么挑战阻止了他们使用 Go,以及其中哪个是主要障碍。显示使用 Go 的障碍图表

从这些结果中我们得出的情况支持了先前的发现,即缺少功能以及生态系统/库支持不足是 Go 采用的最显著技术障碍。

我们询问了受访者缺少哪些功能或库的更多详情,发现泛型是最常见的关键缺失功能——我们预计 Go 1.18 引入泛型后,这将不再是显著障碍。其次常见的缺失功能与 Go 的类型系统有关。在进行进一步更改之前,我们希望了解引入泛型如何影响或解决围绕 Go 类型系统的潜在需求。目前,我们将收集更多关于这些需求的背景信息,未来可能会探索不同的方式来满足这些需求,例如通过工具、库或对类型系统进行更改。

至于缺失的库,对于添加什么能够为绝大多数想要采用 Go 的开发者扫清障碍,目前尚无明确共识。这将需要进一步探索。

那么,当受访者没有选择 Go 时,他们转而使用了什么?

Chart of which languages respondents used instead of Go

Rust、Python 和 Java 是最常见的选择。Rust 和 Go 的功能集互补,因此当 Go 无法满足项目功能需求时,Rust 可能是一个不错的选择。使用 Python 的主要原因是缺少库和现有的基础设施支持,因此 Python 庞大的包生态系统可能使切换到 Go 变得困难。类似地,选择 Java 而非 Go 的最常见原因是 Go 缺少功能,这在 1.18 版本引入泛型后可能会得到缓解。

Go 满意度和优先级

让我们看看 Go 表现良好的方面以及可以改进的地方。

与去年一致,92% 的受访者表示过去一年中对使用 Go 非常满意或有些满意。

Overall satisfaction on a 5 points scale from very dissatisfied to very satisfied

社区态度的年度趋势显示出轻微波动。使用 Go 不足 3 个月的人往往不太同意这些说法。受访者越来越认为 Go 对其公司的成功至关重要。

Attitudes around using Go at work Community attitudes around welcomeness and confidence in direction of the Go project

优先级

过去几年,我们要求受访者对特定领域进行满意度和重要性评分;我们利用这些信息来找出对受访者重要但他们不满意的领域。然而,这些领域中的大多数在重要性和满意度方面都只显示出微小差异。

Scatter plot of importance compared to satisfaction showing most areas have high satisfaction and where binary size is less important than other areas

今年我们引入了一个新问题,以探索在特定领域优先开展工作的替代方式。“假设您有 10 个 GopherCoin,用于改进使用 Go 的以下方面。您将如何分配您的 GopherCoin?” 两个获得显着更多 GopherCoin 的领域是依赖管理(使用模块)和诊断错误,这两个领域将在 2022 年投入资源进行改进。

Overall sum of coins spent on each area for improvement

使用模块时的挑战

最常见的模块相关挑战是跨多个模块工作(占受访者的 19%),其次是关于版本控制的评论(包括对提交稳定 v1 API 的担忧)。与版本控制相关的是,9% 的回复讨论了版本管理或更新依赖。排在前 5 位的其他挑战包括私有仓库(特别是 GitLab 的身份验证)以及记住不同的 go mod 命令并理解其错误消息。

学习 Go

今年我们采用了新的结构来探索不同 Go 经验水平之间的相对生产力。绝大多数受访者(88%)同意他们能够经常达到高水平的生产力,85% 同意他们在编写 Go 代码时通常能够达到心流状态。随着 Go 经验的增加,同意的比例也随之增加。

Charts showing proportion of respondents who agree they feel productive using Go and can achieve a state of flow while writing in Go

我们应该在哪些领域投入精力编写最佳实践文档?

一半的受访者希望在性能优化和项目目录结构方面获得更多最佳实践指导。不出所料,新 Go 用户(使用 Go 不足 1 年)比经验丰富的 Go 用户需要更多指导,尽管两类人群最关注的领域是一致的。值得注意的是,新 Go 用户在并发方面寻求的指导比经验丰富的 Go 用户更多。

Chart showing which areas respondents want more guidance on best practices

开发者如何学习一门新语言?

约一半的受访者在工作中学习了一门新语言,但几乎同样多 (45%) 的人在学校或工作之外学习。受访者最常 (90%) 表示独自学习。在那些表示他们在工作中学习的人中,虽然可能存在集体学习的机会,但 84% 的人选择独自学习而不是集体学习。

Chart showing half of respondents learned a new language at work while 45% learned a new language outside of school or work Chart showing 90% of respondents learned their last new language alone

许多顶级的学习资源都强调了良好文档的重要性,但现场教学作为语言学习的资源也显得尤为有用。

Chart showing which resources are most helpful for learning a new programming language where reading reference docs and written tutorials are most useful

开发者工具和实践

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

Primary operating system from 2019 to 2021

目标平台

超过 90% 的受访者以 Linux 为目标平台!尽管在 macOS 上开发的受访者多于 Windows,但他们部署到 Windows 的频率高于 macOS。

Chart showing which platforms respondents deploy their Go code on

模糊测试

大多数受访者不熟悉模糊测试,或者仍然认为自己是模糊测试的新手。基于这一发现,我们计划 1) 确保 Go 的模糊测试文档除了 Go 中模糊测试的具体内容外,也解释模糊测试的概念,以及 2) 设计输出和错误消息使其具有可操作性,以便帮助模糊测试新手成功应用它。

Chart showing proportion of respondents who have used fuzzing

云计算

Go 在设计时就考虑到了现代分布式计算,我们希望继续改进使用 Go 构建云服务的开发者体验。今年,将 Go 程序部署到全球三大云提供商(Amazon Web Services、Google Cloud Platform 和 Microsoft Azure)的受访者比例保持大致相同,而部署到自建或公司自有服务器的比例持续下降。

Bar chart of cloud providers used to deploy Go programs where AWS is the most common at 44%

部署到 AWS 的受访者中,部署到托管 Kubernetes 平台的比例有所增加,现在在部署到三大云提供商任一提供商的用户中占 35%。所有这些云提供商都看到将 Go 程序部署到虚拟机的用户比例下降。

Bar charts of proportion of services being used with each provider

今年的变化

去年我们引入了模块化调查设计,以便在不延长调查时间的情况下提出更多问题。今年我们继续采用模块化设计,尽管有些问题被取消,有些则被添加或修改。没有受访者看到了调查中的所有问题。此外,某些问题的样本量可能小得多,因为它们是根据前一个问题选择性地提出的。

今年调查中最显著的变化在于我们招募参与者的方式。往年,我们通过 Go 博客宣布调查,并在 Twitter、Reddit 或 Hacker News 等各种社交渠道上被转载。今年,除了传统渠道,我们还利用 VS Code Go 插件随机选择用户显示一个提示,询问他们是否愿意参与调查。这创建了一个随机样本,我们用它来与来自传统渠道的自我选择受访者进行比较,并帮助识别自我选择偏差的潜在影响。

Proportion of respondents from each source

将近三分之一的受访者是通过这种方式获得的,因此他们的回答有可能对今年我们看到的整体回复产生显著影响。这两组之间的一些关键差异包括:

更多新 Go 用户

随机抽样组中新 Go 用户(使用 Go 不足一年)的比例更高。这可能是因为新 Go 用户与 Go 生态系统或社交渠道的联系较少,因此他们更有可能在 IDE 中看到调查广告,而不是通过其他方式发现。无论原因如何,很高兴能听到更广泛的 Go 社区的声音。

Comparison of proportion of respondents with each level of experience for randomly sampled versus self-selected groups

更多 VS Code 用户

毫不奇怪,通过 VS Code 插件参与调查的受访者中有 91% 在使用 Go 时更喜欢使用 VS Code。因此,今年我们看到 VS Code 的编辑器偏好显著更高。当我们排除随机样本时,结果与去年没有统计学上的差异,因此我们知道这是样本变化的结果,而不是整体偏好。同样,VS Code 用户也比其他受访者更有可能在 Windows 上进行开发,因此我们看到今年对 Windows 的偏好略有增加。我们还看到某些与 VS Code 编辑器使用相关的开发者技术的使用方式略有变化。

Grouped bar chart of which editor respondents prefer from each sample group Grouped bar chart of primary operating system respondents use to develop go on Grouped bar chart showing which techniques respondents use when writing in Go

不同的资源

随机抽样组将 Go 博客等社交渠道评为回答 Go 相关问题的首选资源的比例较低,因此他们可能不太可能在这些渠道上看到调查广告。

Grouped bar chart showing the top resources respondents use when writing in Go

结论

感谢您与我们一起回顾 2021 年开发者调查的结果!重申一下,一些主要收获是:

  • 我们的多数年度指标保持稳定,大多数变化源于样本的变化。
  • 对 Go 的满意度仍然很高!
  • 四分之三的受访者在工作中使用 Go,许多人每天使用 Go,因此帮助您完成工作是我们的首要任务。
  • 我们将优先改进调试和依赖管理工作流程。
  • 我们将继续努力,使 Go 成为一个包容所有 Go 用户的社区。

了解开发者的经验和挑战有助于我们衡量进展并指导 Go 的未来。再次感谢所有为本次调查做出贡献的人——没有你们,我们不可能完成这项工作。希望明年再见!

下一篇文章:分享您关于使用 Go 开发的反馈
上一篇文章:何时使用泛型
博客索引