首页 后端开发 Golang 《2021 年 Go 官方开发者调查报告》

《2021 年 Go 官方开发者调查报告》

Aug 07, 2023 pm 04:22 PM
go

每年 Go 官方都会组织进行一次 Go 开发者的调查,上年也不除外。不过调查完,收集了资料后就不见人影了...不然是社区和某时间的朋友们都会问我在哪里可以看到。

这不,最近官方终于发布了《Go Developer Survey 2021 Results[1]》,我直接翻译了(有删减,仅展示重点内容),大家可以看看,了解下 Go 的社区行情发展。

Go 开发者调查结果

亮点

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

我们听了谁的声音?

我们的人口统计数据逐年保持稳定(见 2020 年的结果)。与往年一致,Go主要用于科技行业。70% 的受访者是软件开发人员,少数是 IT 或 DevOps,76% 的受访者表示他们在工作中用 Go 编程。

《2021 年 Go 官方开发者调查报告》
《2021 年 Go 官方开发者调查报告》
《2021 年 Go 官方开发者调查报告》

2021 年的一些新人口统计数据:

  • 大多数受访者将他们的组织描述为企业或中小型企业,约四分之一的人将他们的组织描述为初创企业。咨询公司和公共机构的情况要少得多。
  • 绝大多数受访者在不到 10 人的团队中工作。
  • 超过一半(55%)的受访者每天在工作中使用 Go。受访者在工作之外使用 Go 的频率较低。
《2021 年 Go 官方开发者调查报告》
《2021 年 Go 官方开发者调查报告》
《2021 年 Go 官方开发者调查报告》

Go 应用面临的挑战

我们问受访者在过去一年中是否评估过使用其他语言来替代 Go。43% 的受访者表示,他们曾评估过切换到 Go,或者在之前没有既定语言的情况下采用 Go。

这些评估中的 80% 主要是出于商业原因。

《2021 年 Go 官方开发者调查报告》

我们预计 Go 最常见的用例将是评估 Go 的人最常见的预期用途。到目前为止,API/RPC 服务是最常见的用途,但令人惊讶的是,数据处理是第二常见的预期用例。

《2021 年 Go 官方开发者调查报告》

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

《2021 年 Go 官方开发者调查报告》

对于那些评估了 Go 但没有使用 Go 的人,我们接着问他们有哪些挑战阻碍了他们使用 Go,其中哪个是主要障碍。

《2021 年 Go 官方开发者调查报告》

我们从这些结果中得到的情况支持了之前的发现,即缺少功能和缺乏生态系统/库支持是采用Go的最重要的技术障碍。

我们询问了更多关于受访者缺少哪些功能或库的细节,发现泛型是最常见的关键性缺失功能 -- 我们希望在 Go1.18 引入泛型之后,这将成为一个不那么重要的障碍。接下来最常见的缺失功能是与 Go 的类型系统有关的。

我们希望在做出更多改变之前,看看引入泛型会如何影响或解决围绕 Go 类型系统的潜在需求。

目前,我们将收集更多关于这些需求背景的信息,并可能在未来探索不同的方式来满足这些需求,例如通过工具、库或对类型系统的修改。

至于缺失的库,对于增加什么样的库可以解开最大比例的想采用Go的人的障碍,并没有明确的共识。这需要进一步的探索。

那么,当受访者不选择 Go 时,他们用什么来代替呢?

《2021 年 Go 官方开发者调查报告》

Rust、Python 和 Java 是最常见的选择。

Rust 和 Go 有互补的功能集,所以当 Go 不能满足项目的功能需求时,Rust 可能是一个不错的选择。

使用 Python 的主要原因是缺少库和现有的基础设施支持,所以 Python 的大型软件包生态系统可能会使其难以转换为 Go。

同样地,使用 Java 的最常见的原因是 Go 的功能缺失,这可能会因为 1.18 版本中引入泛型而得到缓解。

Go 满意度和优先级

让我们看看 Go 在哪些方面做得好,哪些方面可以改进。

与去年一致,92% 的受访者表示他们在过去一年中对 Go 的使用非常满意或比较满意。

《2021 年 Go 官方开发者调查报告》

今年,我们引入了一个新的问题,以探索在特定领域中确定工作优先次序的其他方法。

问题:"假设你有 10 个 GopherCoins 可以用来改善围棋工作的以下方面。你会如何分配你的硬币?"

突出的两个领域是依赖性管理(使用模块)和诊断错误,这些领域我们将在 2022 年投入资源。

《2021 年 Go 官方开发者调查报告》

在 Go 依赖管理上,最常见的挑战是:

  • 在多个模块之间工作(19% 的受访者)。
  • 是关于版本的评论(包括对承诺稳定的 V1 版 API 的恐惧)。

与版本有关,9% 的答复讨论了版本管理或更新依赖关系。排在前五位的是关于私有仓库的挑战(包括对 GitLab 的认证)和记住不同的 go mod 命令以及理解它们的错误信息。

开发者工具和实践

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

《2021 年 Go 官方开发者调查报告》

在使用 VSCode 插件进行调查的受访者中,有 91% 的受访者在使用 Go 时更喜欢使用 VSCode。

《2021 年 Go 官方开发者调查报告》

目标(部署)平台

超过 90% 的受访者以 Linux 为目标! 尽管在 macOS 上开发的受访者比 Windows多,但他们更经常部署到 Windows 而不是 macOS。

《2021 年 Go 官方开发者调查报告》

总结

整体回顾我们 2021 年的开发者调查结果 重申一下,一些关键的收获。

  • 我们的大多数同比指标保持稳定,大多数变化是由于我们的样本变化。
  • 对 Go 的满意程度仍然很高!
  • 四分之三的受访者在工作中使用 Go,许多人每天都在使用Go,所以帮助你完成工作是首要任务。
  • 我们将优先考虑对调试和依赖性管理工作流程的改进。
  • 我们将继续努力,使 Go 成为各种 Gophers 的包容性社区。

简单来讲,就是欣欣向荣,大部分人对 Go 都比较满意。

最大矛盾点是泛型和依赖管理。泛型已在 Go1.18 已经释出,依赖管理持续在改进,也会加大对调试工具的优化。

以上是《2021 年 Go 官方开发者调查报告》的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Go WebSocket 消息如何发送? Go WebSocket 消息如何发送? Jun 03, 2024 pm 04:53 PM

在Go中,可以使用gorilla/websocket包发送WebSocket消息。具体步骤:建立WebSocket连接。发送文本消息:调用WriteMessage(websocket.TextMessage,[]byte("消息"))。发送二进制消息:调用WriteMessage(websocket.BinaryMessage,[]byte{1,2,3})。

深入理解 Golang 函数生命周期与变量作用域 深入理解 Golang 函数生命周期与变量作用域 Apr 19, 2024 am 11:42 AM

在Go中,函数生命周期包括定义、加载、链接、初始化、调用和返回;变量作用域分为函数级和块级,函数内的变量在内部可见,而块内的变量仅在块内可见。

如何在 Go 中使用正则表达式匹配时间戳? 如何在 Go 中使用正则表达式匹配时间戳? Jun 02, 2024 am 09:00 AM

在Go中,可以使用正则表达式匹配时间戳:编译正则表达式字符串,例如用于匹配ISO8601时间戳的表达式:^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$。使用regexp.MatchString函数检查字符串是否与正则表达式匹配。

Golang 与 Go 语言的区别 Golang 与 Go 语言的区别 May 31, 2024 pm 08:10 PM

Go和Go语言是不同的实体,具有不同的特性。Go(又称Golang)以其并发性、编译速度快、内存管理和跨平台优点而闻名。Go语言的缺点包括生态系统不如其他语言丰富、语法更严格以及缺乏动态类型。

Golang 技术性能优化中如何避免内存泄漏? Golang 技术性能优化中如何避免内存泄漏? Jun 04, 2024 pm 12:27 PM

内存泄漏会导致Go程序内存不断增加,可通过:关闭不再使用的资源,如文件、网络连接和数据库连接。使用弱引用防止内存泄漏,当对象不再被强引用时将其作为垃圾回收目标。利用go协程,协程栈内存会在退出时自动释放,避免内存泄漏。

如何在 IDE 中查看 Golang 函数文档? 如何在 IDE 中查看 Golang 函数文档? Apr 18, 2024 pm 03:06 PM

使用IDE查看Go函数文档:将光标悬停在函数名称上。按下热键(GoLand:Ctrl+Q;VSCode:安装GoExtensionPack后,F1并选择"Go:ShowDocumentation")。

Go 并发函数的单元测试指南 Go 并发函数的单元测试指南 May 03, 2024 am 10:54 AM

对并发函数进行单元测试至关重要,因为这有助于确保其在并发环境中的正确行为。测试并发函数时必须考虑互斥、同步和隔离等基本原理。可以通过模拟、测试竞争条件和验证结果等方法对并发函数进行单元测试。

Golang 函数接收 map 参数时的注意事项 Golang 函数接收 map 参数时的注意事项 Jun 04, 2024 am 10:31 AM

在Go中传递map给函数时,默认会创建副本,对副本的修改不影响原map。如果需要修改原始map,可通过指针传递。空map需小心处理,因为技术上是nil指针,传递空map给期望非空map的函数会发生错误。

See all articles