Go 博客

Go 开发者调查 2021 年结果

Alice Merrick
2022 年 4 月 19 日

非常感谢社区的积极响应!

2021 年,我们在 10 月 26 日至 11 月 16 日期间进行了 Go 开发者调查,共收到 11,840 份回复,这是我们举办调查 6 年以来参与人数最多的一次!感谢您抽出宝贵时间,为社区提供关于使用 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 进行比较。80% 的受访者表示他们曾评估过切换到 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 缺少功能,这可以通过 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,分别是依赖管理(使用模块)和诊断 bug,这些是我们将在 2022 年投入资源的领域。

Overall sum of coins spent on each area for improvement

使用模块时的挑战

最常见的与模块相关的挑战是处理多个模块(占受访者的 19%),其次是关于版本控制的评论(包括对提交稳定 v1 API 的犹豫)。与版本控制相关,9% 的回复讨论了版本管理或更新依赖项。排名前五的是关于私有仓库的挑战(包括与 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

模糊测试

大多数受访者不熟悉模糊测试(fuzzing),或者仍然认为自己是模糊测试的新手。基于这一发现,我们计划 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 程序部署到 VM 的用户比例都有所下降。

Bar charts of proportion of services being used with each provider

今年的变化

去年我们引入了模块化调查设计,以便在不增加调查长度的情况下提出更多问题。今年我们继续采用模块化设计,虽然一些问题被停用,另一些问题被添加或修改。没有受访者看到调查的所有问题。此外,由于一些问题是根据之前的回答选择性提出的,因此可能样本量要小得多。

今年调查最显著的变化在于我们招募参与者的方式。往年,我们通过 Go Blog 发布调查信息,然后在 Twitter、Reddit 或 Hacker News 等各种社交渠道上传播。今年,除了传统渠道外,我们还通过 VS Code Go 插件随机选择用户,向他们展示一个询问是否愿意参与调查的提示。这形成了一个随机样本,我们将其与来自传统渠道的自愿选择的受访者进行比较,并帮助识别了选择性偏差的潜在影响。

Proportion of respondents from each source

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

更多新 Gopher

随机抽样群体中新 Gopher(使用 Go 不足一年的用户)的比例更高。这可能是因为新 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 Blog 等社交渠道列为他们回答 Go 相关问题的首选资源,因此他们可能不太可能在这些渠道上看到调查广告。

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

结论

感谢您与我们一起回顾 2021 年开发者调查结果!重申一下,一些关键要点:

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

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

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