Go 博客

Go 2018 年度调查结果

Todd Kulesza, Steve Francia
2019 年 3 月 28 日

感谢

本文总结了我们 2018 年度用户调查的结果,并与我们之前在 2016 年和 2017 年的调查结果进行了比较。

今年,我们收到了来自 103 个不同国家/地区的 5,883 份调查回复。我们非常感谢每一位通过本次调查提供反馈、帮助塑造 Go 未来的人。谢谢!

调查发现摘要

  • 今年首次,半数调查受访者现在将 Go 作为其日常工作的一部分使用。今年,将 Go 作为工作一部分进行开发以及在工作职责之外使用 Go 的受访者数量也显著增加。
  • Go 最常见的用途仍然是 API/RPC 服务和命令行工具(CLI)。自动化任务虽然不像 CLI 工具和 API 服务那样普遍,但对于 Go 来说是一个快速增长的领域。
  • Web 开发仍然是调查受访者工作中最常见的领域,但 DevOps 显示出最高的同比增长,现在成为第二常见的领域。
  • 尽管通常感觉对 Go 的熟练程度不如至少一种其他语言,但绝大多数调查受访者表示 **Go 是他们最喜欢的编程语言**。
  • VS Code 和 GoLand 的流行度激增,现在成为调查受访者中最受欢迎的代码编辑器。
  • 突出显示 Go 的可移植性,许多 Go 开发者使用不止一种主要操作系统进行开发。Linux 和 macOS 特别受欢迎,绝大多数调查受访者使用这两种操作系统之一或两者来编写 Go 代码。
  • 调查受访者似乎正在从本地部署(on-prem)Go 转向容器和无服务器云部署
  • 大多数受访者表示他们在 Go 社区中感到受欢迎,并且大多数改善 Go 社区的建议特别关注改善新手的体验

请继续阅读所有详细内容。

编程背景

今年的结果显示,作为工作一部分编写 Go 并获得报酬的调查受访者数量显著增加(68% → 72%),延续了自 2016 年首次调查以来持续增长的同比趋势。我们还看到在工作之外使用 Go 编程的受访者数量有所增加(64% → 70%)。Go 作为其日常工作一部分的受访者数量首次达到 50%(高于 2016 年的 44%)。这些发现表明,企业正以稳定的速度继续拥抱 Go 进行专业的软件开发,并且 Go 在开发者中的普遍受欢迎程度依然很高。

为了更好地了解开发者在何处使用 Go,我们将回复分为三组

  1. 在工作内外都使用 Go 的人,
  2. 专业使用 Go 但不在工作之外使用的人,以及 3) 仅在工作职责之外编写 Go 代码的人。近一半(46%)的受访者既专业地也利用业余时间编写 Go 代码(自 2017 年以来增加了 10 个百分点),而其余受访者则大致平均地分为仅在工作中使用 Go 或仅在工作之外使用 Go。在工作中和工作之外都使用 Go 的受访者比例很高,这表明 Go 语言对那些不将软件工程仅仅视为一份日常工作的人具有吸引力:他们也选择在工作职责之外编写代码,并且(正如 85% 的受访者表示他们希望在下一个项目中使用 Go 所证实的那样,参见下面的对 Go 的态度部分)Go 是他们最希望用于这些非工作相关项目的首选语言。

当被问及使用 Go 多长时间时,参与者的回答呈现明显的上升趋势,每年使用 Go 2-4 年和 4 年以上的受访者比例更高。对于一种较新的编程语言来说,这是预料之中的,我们很高兴看到 Go 新手的比例下降速度慢于使用 Go 两年以上的受访者比例的增长速度,这表明开发者在初步学习 Go 语言后并没有退出生态系统。

与往年一样,Go 在受访者首选语言和他们拥有专业知识的语言中名列前茅。大多数受访者(69%)声称在 5 种不同的语言方面拥有专业知识,这突出表明他们对 Go 的态度受到其他编程技术栈经验的影响。下面的图表按将每种语言列为最首选/最了解(最深蓝色条)的受访者数量排序,这突出了三个有趣的方面

  • 虽然约 ⅓ 的受访者认为 Go 是他们拥有最多专业知识的语言,但将 Go 视为他们最喜欢的编程语言的受访者数量是其两倍。因此,尽管许多受访者觉得他们对 Go 的熟练程度不如某些其他语言,但他们仍然经常更喜欢使用 Go 进行开发。
  • 很少有调查受访者将 Rust 列为他们拥有专业知识的语言(6.8%),但 19% 的受访者将其列为首选语言,这表明 Rust 在此受众中具有高度的吸引力。
  • 只有三种语言的受访者表示喜欢该语言的人数多于表示对其拥有专业知识的人数:Rust(喜欢:专业知识比例为 2.41:1)、Kotlin(1.95:1)和 Go(1.02:1)。喜欢程度高于专业知识意味着对某种语言感兴趣,但缺乏直接经验;而喜欢程度低于专业知识则表明熟练使用存在障碍。比例接近 1.0 表明大多数开发者能够有效地愉快地使用某种语言。此数据与 Stack Overflow 2018 年开发者调查的结果相符,该调查也发现 Rust、Kotlin 和 Go 是最受欢迎的编程语言之一。

解读数据:参与者可以列出他们排名前 5 的语言。颜色编码从最深蓝色(排名第一)开始,随着排名降低颜色变浅。这些图表按将每种语言列为首选的参与者比例排序。

开发领域

调查受访者表示平均在三个不同领域工作,其中绝大多数(72%)在 2-5 个不同领域工作。Web 开发最为普遍,占 65%,并且作为调查受访者主要工作领域的地位进一步巩固(高于去年的 61%):自 2016 年以来,Web 开发一直是 Go 开发中最常见的领域。今年,DevOps 显著增长,从 36% 增加到 41% 的受访者,取代系统编程成为第二大领域。我们没有发现任何在 2018 年的使用率低于 2017 年的领域,这表明受访者正在将 Go 应用于更广泛的项目,而不是将使用范围从一个领域转移到另一个领域。

自 2016 年以来,Go 的两大主要用途一直是编写 API/RPC 服务和开发命令行应用程序。虽然 CLI 使用率三年以来保持在 63% 稳定不变,但 API/RPC 使用率已从 2016 年的 60% 增至 2017 年的 65%,如今更是达到 73%。这些领域充分发挥了 Go 的核心优势,并且都是云原生软件开发的关键所在,因此我们预计它们将在未来继续成为 Go 开发者的两个主要应用场景。直接返回 HTML 的 Web 服务编写者比例稳步下降,而 API/RPC 使用率增加,这表明 Web 服务正在向 API/RPC 模型迁移。另一项同比趋势表明,自动化也是 Go 的一个增长领域,现在有 38% 的受访者将 Go 用于脚本和自动化任务(高于 2016 年的 31%)。

为了更好地了解开发者使用 Go 的背景,我们添加了一个关于 Go 在不同行业采用情况的问题。对于一种相对较新的语言来说,超过一半的调查受访者在 互联网/网络服务软件 类别(即科技公司)的公司工作,这或许并不令人意外。回复率超过 3% 的其他行业仅有 金融、银行或保险媒体、广告、出版或娱乐。(在下面的图表中,我们将所有回复率低于 3% 的类别合并到“其他”类别中。)我们将继续跟踪 Go 在各个行业的采用情况,以便更好地了解技术公司之外的开发者需求。

对 Go 的态度

今年我们增加了一个问题:“您向朋友或同事推荐 Go 的可能性有多大?”,以此计算我们的净推荐值(Net Promoter Score)。该分数旨在衡量产品的“推荐者”比“贬低者”多多少,范围从 -100 到 100;正值表示大多数人可能会推荐使用该产品,而负值表示大多数人可能会建议不要使用该产品。我们 2018 年的分数是 61(68% 推荐者 - 7% 贬低者),这将作为基准,帮助我们随着时间推移衡量社区对 Go 生态系统的看法。

除了净推荐值,我们还询问了几个关于开发者对 Go 满意度的问题。总体而言,调查受访者表示满意度很高,与往年一致。绝大多数受访者表示对 Go 感到满意(89%),愿意在他们的下一个项目中使用 Go(85%),并认为 Go 对他们的团队运作良好(66%),同时大部分人(44%)认为 Go 对其公司的成功至少在一定程度上至关重要。虽然所有这些指标在 2017 年都显示出增长,但今年基本保持稳定。(第一个问题的措辞在 2018 年从“我愿意向他人推荐使用 Go”改为“总体而言,我对 Go 感到满意”,因此这些结果不能直接比较。)

考虑到开发者强烈倾向于未来开发使用 Go,我们希望了解阻碍开发者这样做的原因。这些原因自去年以来基本没有变化:大约 ½ 的调查受访者在用其他语言编写的现有项目上工作,而 ⅓ 的受访者在团队或项目中偏好使用不同的语言。缺少语言特性和库是受访者更多使用 Go 的最常见原因。我们还询问了开发者在使用 Go 时面临的最大挑战;与大多数调查问题不同,受访者可以自由输入任何他们想回答的内容。我们通过机器学习分析了结果,以确定常见主题并统计支持每个主题的回复数量。我们确定的三大主要挑战是

  • 包管理(例如,“跟上 vendoring”、“依赖/包管理/vendoring 不统一”)
  • 与更熟悉的编程语言的差异(例如,“语法接近 C 系语言,但语义略有不同,这让我查找参考资料的次数比我希望的要多”、“来自非 Go 背景的同事试图将 Go 作为他们之前语言的一个版本来使用,但带有 channel 和 Goroutine”)
  • 缺乏泛型(例如,“缺乏泛型使得很难说服没有尝试过 Go 的人相信他们会觉得它高效。”,“难以构建更丰富的抽象(需要泛型)”)

今年我们增加了一些问题,询问开发者对 Go 不同方面的满意度。调查受访者对 Go 应用程序的 CPU 性能(46:1,意味着每 1 位表示不满意的受访者对应 46 位表示满意的受访者)、构建速度(37:1)和应用程序内存利用率(32:1)非常满意。然而,关于应用程序可调试性(3.2:1)和二进制文件大小(6.4:1)的回复表明仍有改进空间。

对二进制文件大小的不满很大程度上来自构建 CLI 的开发者,其中只有 30% 对 Go 生成的二进制文件大小感到满意。然而,对于所有其他类型的应用程序,开发者的满意度都 > 50%,并且二进制文件大小始终排在重要因素列表的末尾。

相反,当我们查看受访者对各个方面重要性的排名时,可调试性(debuggability)就显得尤为突出;44% 的受访者将可调试性列为他们最重要或第二重要的方面,但只有 36% 对当前 Go 的调试现状感到满意。可调试性始终被评为与内存使用和构建速度大致同等重要,但满意度水平显著较低,并且这种模式无论受访者构建何种类型的软件都成立。最近的两个 Go 版本,Go 1.11 和 1.12,都包含了对可调试性的显著改进。我们计划今年更深入地调查开发者如何调试 Go 应用程序,目标是改善 Go 开发者的整体调试体验。

开发环境

我们询问受访者在编写 Go 代码时主要使用哪些操作系统。大多数受访者(65%)表示他们使用 Linux,50% 使用 macOS,18% 使用 Windows,与去年一致。今年我们还研究了多少受访者在多个操作系统上进行开发,以及多少在单个操作系统上进行开发。Linux 和 macOS 仍然是明显的领先者,81% 的受访者在这两个系统的某种组合上进行开发。只有 3% 的受访者平均分配时间在所有三个操作系统上。总体而言,41% 的受访者使用多个操作系统进行 Go 开发,突显了 Go 的跨平台特性。

去年,VS Code 以微弱优势击败 Vim,成为调查受访者中最受欢迎的 Go 编辑器。今年,它的领先优势显著扩大,成为超过 ⅓ 的调查受访者的首选编辑器(高于去年的 27%)。GoLand 也经历了强劲增长,目前以 22% 的比例成为第二大首选编辑器,与 Vim(降至 17%)交换了位置。VS Code 和 GoLand 迅速流行的原因似乎是以 Sublime Text 和 Atom 的使用量下降为代价。Vim 将其列为首选的受访者数量也有所下降,但在 14% 的受访者中仍然是最受欢迎的第二选择编辑器。有趣的是,我们发现受访者对其所选编辑器的满意度水平没有差异。

我们还询问了受访者,哪些方面最能改善他们首选编辑器中的 Go 支持。与上面的“最大挑战”问题一样,参与者可以自由输入自己的回答,而不是从多选题列表中选择。对回答进行的主题分析显示,改进调试支持(例如,“实时调试”、“集成调试”、“更好的调试”)是最常见的请求,其次是改进代码补全(例如,“自动补全性能和质量”、“更智能的自动补全”)。其他请求包括更好地与 Go 的 CLI 工具链集成、更好地支持模块/软件包以及一般的性能改进。

今年我们还增加了一个问题,询问哪种部署架构对 Go 开发者最重要。毫不意外,绝大多数调查受访者将 x86/x86-64 视为他们的首选部署平台(76% 的受访者将其列为最重要的部署架构,84% 的受访者将其列在前 3 位)。然而,第二和第三选择架构的排名提供了信息:对 ARM64(45%)、WebAssembly(30%)和 ARM(22%)有显著兴趣,但对其他平台兴趣甚微。

部署和服务

2018 年,我们看到 Go 和非 Go 部署都延续了从本地(on-prem)向云托管的趋势。将 Go 应用程序部署到本地服务器的调查受访者比例从 43% 下降到 32%,这与非 Go 部署报告的 46% 下降到 36% 相对应。同比增长率最高的云服务包括 AWS Lambda(Go 部署从 4% 增至 11%,非 Go 部署从 10% 增至 15%)和 Google Kubernetes Engine(Go 部署从 8% 增至 12%,非 Go 部署从 5% 增至 10%),这表明无服务器和容器正日益成为流行的部署平台。然而,这种服务增长似乎是由已经采用云服务的受访者推动的,因为我们发现今年部署到至少一种云服务的受访者比例没有显著增长(55% → 56%)。自 2016 年以来,我们还看到 Go 部署到 GCP 的比例稳步增长,从 12% 增至 19% 的受访者。

这可能与本地部署的减少相关,今年我们看到云存储成为调查受访者使用量排名第二的服务,从 32% 增至 44%。认证与联合服务也显著增加(26% → 33%)。调查受访者从 Go 访问的主要服务仍然是开源关系型数据库,其比例从 61% 略微上升到 65% 的受访者。如下图所示,服务使用量全面增加。

Go 社区

查找 Go 问题答案的主要社区来源仍然是 Stack Overflow(23% 的受访者将其标记为首选来源)、Go 网站(godoc.org 占 18%,golang.org 占 14%)以及阅读源代码(一般源代码占 8%,GitHub 特别占 4%)。顺序与往年基本一致。Go 新闻的主要来源仍然是 Go 博客、Reddit 的 r/golang、Twitter 和 Hacker News。然而,这些也是本次调查的主要分发渠道,因此结果可能存在一定偏差。在下面的两张图表中,我们将使用率低于 < 5% 的来源归入“其他”类别。

今年,55% 的调查受访者表示他们已经或有兴趣为 Go 社区做出贡献,略低于去年的 59%。由于最常见的两个贡献领域(标准库和官方 Go 工具)需要与核心 Go 团队互动,我们怀疑这种下降可能与同意以下说法(“我向 Go 项目领导层提问和提供反馈时感到自在” (30% → 25%) 和 “我对 Go 的领导层充满信心” (54% → 46%))的参与者比例下降有关。

社区的一个重要方面是帮助每个人感到受欢迎,尤其是来自传统上代表性不足的人群。为了更好地了解这一点,我们提出了一个可选问题,询问参与者是否属于几个代表性不足的群体之一。2017 年,我们看到所有群体的比例都有同比增加。对于 2018 年,我们看到表示自己属于代表性不足群体的受访者比例与去年相似(12%),同时认为自己属于代表性不足群体的受访者比例显著下降。2017 年,每 1 位认为自己属于代表性不足群体的受访者,就有 3.5 位认为自己不属于代表性不足群体(比例为 3.5:1)。2018 年,这一比例改善至 3.08:1。这表明 Go 社区至少保持了代表性不足成员的相同比例,甚至可能有所增加。

维护一个健康的社区对 Go 项目至关重要,因此在过去三年里,我们一直在衡量开发者在 Go 社区中感到受欢迎的程度。今年,同意“我在 Go 社区中感到受欢迎”这一说法的调查受访者比例有所下降,从 66% 降至 59%。

为了更好地理解这种下降,我们更仔细地研究了哪些人表示感到不太受欢迎。在传统上代表性不足的群体中,表示在 2018 年感到不受欢迎的人数较少,这表明在该领域的宣传推广是有帮助的。相反,我们发现在使用 Go 的时间长短与他们感到受欢迎的程度之间存在线性关系:新的 Go 开发者(50%)比拥有 1-2 年经验的开发者(62%)感到受欢迎的程度显著较低,而拥有几年经验的开发者(73%)又比拥有 1-2 年经验的开发者感到更受欢迎。对这个问题的回复:“做哪些改变会使 Go 社区更受欢迎?”支持了对数据的这种解释。受访者的评论可以大致分为四类

  • 减少精英主义的观念,特别是对于 Go 新手(例如,“少一些不屑”、“少一些辩解和傲慢”)
  • 提高领导层的透明度(例如,“未来的方向和规划讨论”、“少一些自上而下的领导”、“更民主”)
  • 增加入门资源(例如,“为贡献者提供更清晰的介绍”、“学习最佳实践的有趣挑战”)
  • 举办更多活动和线下聚会,重点覆盖更广泛的地理区域(例如,“更多聚会和社交活动”、“在更多城市举办活动”)

这些反馈非常有帮助,为我们指明了可以着重改进的具体领域,以提升 Go 开发者的体验。虽然这不代表我们用户群的很大一部分,但我们非常重视这些反馈,并正在努力改进各个方面。

结论

希望您喜欢看到我们 2018 年开发者调查的结果。这些结果正在影响我们 2019 年的规划,在接下来的几个月里,我们将与您分享一些想法,以解决社区向我们提出的具体问题和需求。再次感谢所有为本次调查做出贡献的人!

下一篇文章:迈向 Go 2 的下一步
上一篇文章:在 Go 1.12 中调试您部署的内容
博客索引