Go 博客

Go 开发者调查 2021 结果

Alice Merrick
2022 年 4 月 19 日

衷心感谢社区的热情参与!

2021 年,我们从 10 月 26 日到 11 月 16 日进行了 Go 开发者调查,收到了 11,840 份回复,这是我们连续 6 年进行调查以来规模最大的一次!感谢您抽出时间,为社区提供关于您使用 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 的人遇到的最大障碍,没有明确的共识。这需要额外的探索。

那么,当受访者没有选择 Go 时,他们使用了哪些替代方案?

Chart of which languages respondents used instead of Go

Rust、Python 和 Java 是最常见的选择。Rust 和 Go 具有互补的特性集,因此当 Go 无法满足项目的功能需求时,Rust 可能是一个不错的选择。使用 Python 的主要原因是缺少库和现有基础设施支持,因此 Python 的大型包生态系统可能会让开发者难以从 Go 切换到 Python。同样,使用 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 个 GopherCoins 可以用来改进与 Go 工作相关的以下方面。您将如何分配您的 GopherCoins?”有两个领域脱颖而出,获得了明显更多的 GopherCoins,分别是依赖项管理(使用模块)和调试错误,这两个领域是我们将在 2022 年投入资源的领域。

Overall sum of coins spent on each area for improvement

使用模块时遇到的挑战

最常见的与模块相关的挑战是跨多个模块工作(19% 的受访者),其次是有关版本控制的评论(包括对稳定版 v1 API 的承诺的担心)。与版本控制相关的,9% 的回复讨论了版本管理或更新依赖项。排名前五的还有与私有仓库相关的挑战(包括与 GitLab 的身份验证,尤其是 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

我们应该在哪些领域投资最佳实践文档?

一半的受访者希望获得更多关于性能优化和项目目录结构最佳实践的指导。不出所料,新的 Gopher(使用 Go 少于 1 年)比更有经验的 Gopher 需要更多指导,尽管两个群体中的热门领域保持一致。值得注意的是,新的 Gopher 比更有经验的 Gopher 要求更多关于并发性的指导。

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 程序部署到全球三大云提供商(亚马逊网络服务、谷歌云平台和微软 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

我们近三分之一的受访者是通过这种方式获得的,因此他们的回复有可能对今年看到的回复产生重大影响。我们在这两个群体之间看到的一些主要差异是

更多新的 Gopher

随机选择的样本中,新的 Gopher(使用 Go 少于 1 年的人)所占比例更高。可能是新的 Gopher 还没有很好地融入 Go 生态系统或社交渠道,因此他们更有可能在 IDE 中看到调查广告,而不是通过其他方式找到调查。无论原因是什么,听到更多来自 Go 社区的不同声音都是很棒的。

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

更多 VS Code 用户

不出所料,91% 来自 VS Code 插件的受访者更喜欢在使用 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 成为一个对所有类型 Gopher 来说都具有包容性的社区。

了解开发人员的体验和挑战有助于我们衡量我们的进展,并指引 Go 的未来。再次感谢所有参与本次调查的人 - 没有你们,我们无法完成它。希望明年还能见到你们!

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