欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

go语言编译器哪个好用(go语言ide开发工具)

程序员文章站 2023-12-06 08:59:22
2007 年 9 月 21 日,robert griesemer,rob pike 和 ken thompson 在一块白板上勾勒了一个新语言,并在几天内定下了计划和目标,作为一个*时间的项目进行;...

2007 年 9 月 21 日,robert griesemer,rob pike 和 ken thompson 在一块白板上勾勒了一个新语言,并在几天内定下了计划和目标,作为一个*时间的项目进行;2008 年年中,这个项目得到 google 的全力支持,成为了一个全职项目;2009 年 11 月,go 语言正式开源 [1],并于三年后发布 1.0 版本。发布 12 年至今,已有上百万开发者成为“gopher”,已经远超设计者最初的预期。

# 源起 #

go 语言的开发团队可以说是高人云集:ken thompson 创造了 b 语言(c 语言前身),是 unix 和 plan9 操作系统的创立者之一,和 dennis ritchie 一起获得了 1983 年的图灵奖;rob pike 是 unix 小组成员,也是 limbo 语言和 utf-8 编码的主要设计者;robert griesemer 曾参与制作 google 的 javascript 引擎 v8、java 的 hotspot 虚拟机和领域特定语言 sawzall [2](sawzall 最早被 google 用于处理大批量日志,后来基本被 go 取代[3])。

go语言编译器哪个好用(go语言ide开发工具)

go 语言的三位创始人在 google i/o 2012 – meet the go team

随着 go 的发展,出现了一些声音称 go 语言没什么技术优势,而 rob pike 对此的态度是“你们是对的”,go 语言本身 “并不有趣”,其设计初衷不是为了推动编程语言设计的进步,是为改善软件工程的工作环境而生 [4]

当时 google 面临着软件大规模增长的问题,开发方式变得缓慢而笨拙。规模化在各种维度上均存在,比如多核并行、生产需求和依赖关系等,导致硬件和软件都非常大,很多软件的代码多达百万行(大部分使用 c++、java 或 python)。go 语言的诞生解决了大规模的软件开发中一些核心痛点,比如开发缓慢、不受控制的依赖关系、代码理解困难和重复造*等。 [5]

官网描述 go 语言可用于构建“简单、可靠、高效的大规模软件”,jetbrains 2021 年的最新调研报告显示,程序员们在工作中使用 go 语言的比例达到了 61%(rust 语言用于工作的比例仅 16%) [6]

go语言编译器哪个好用(go语言ide开发工具)

使用 go 的场景

可见 go 确实不是一门“有趣”的编程语言,而更看重工程实践中的实用性,go 语言设计中的方方面面都在体现这一点。

# 演进 #

版本更新历史 [7][8]

  • 2012 年 3 月,语言第一个正式版本 go 1.0 发布,同时还有一份兼容性说明文档说明未来版本会确保向后兼容性。
  • 2013 年 5 月,go 1.1 发布,这个版本的编译器、垃圾回收机制、goroutine 调度器性能均有增强。
  • 2014 年 12 月,go 1.4 发布,堆栈大小减少了 10~30%;android 官方支持包随版本一起发布;同时 go 项目从 google code 迁移到了 github。
  • 2015 年 8 月,go 编译器实现自举,完全移除了 c 语言;重新设计了垃圾回收器,支持并发,垃圾回收延迟显著降低,此后版本对垃圾回收器有更进一步的优化。
  • 2018 年 8 月,go 1.11 版本引入了 go 模块功能,以响应在当年语言调研中反馈的模块管理问题;增加了实验性的 webassembly 支持。
  • 2019 年 9 月,go 1.13 版本中,改进了 sync 包 pool 组件的资源被垃圾回收器清除的机制;重写了逃逸分析逻辑。
  • 2020 年 8 月,go 链接器得到了实质性的提高,减少了30% 的内存资源占用,提高了代码的可维护性。
  • 2021 年 2 月,go 1.16 支持了 macos arm64;同时默认使用 go 模块功能(同样来自调研报告反馈的情况)。
  • 2021 年 8 月,go 1.17 发布,增加了对 windows arm64 的支持;语言有三个小的增强(unsage 包的两个新函数和语言类转换规则的扩展)。

go 语言并没有特别激进的新特性,而是从早期的编程语言中继承了很多内容,并做了有效的组合 [9]

go语言编译器哪个好用(go语言ide开发工具)

影响 go 语言设计的早期编程语言

go 语言里一些广受开发者喜爱的特性 [10]

  • 并发性:这是 go 语言最大的特色,从语言层面支持并发,goroutine 和 channel 可以非常容易的实现安全高并发。
  • 高性能 http server:通过简单的代码调用就可以快速实现基于协程的 web 服务[11],处理效率远高于 php。
  • 易部署:直接编译成机器码,除了 glibc 没有其他外部依赖。
  • 易学习:语言设计精简,25 个关键词表达能力强大;因为有 c 语言的基因,所以有 c 语言基础的开发者学习 go 语言会非常轻松。
  • 工具链 & 库:完善的工具链(代码分析、依赖管理等)和出色的标准库大大优化了开发者学习和应用的体验。

go 发布至今还未正式支持泛型,甚至曾有很多人认为 go 语言或许永远不会加泛型,但其实关于泛型的推进工作一直在进行,从 2020 年的调研报告来看,泛型是使用 go 语言的开发者最需要的特性 [12]

go语言编译器哪个好用(go语言ide开发工具)

2020 年 go 开发者调研报告:最需要但还缺少的特性

2021 年初 ian lance taylor 正式发布了添加泛型的提案,不出意外会在下一个版本 go 1.18 中实现。

# 社区 #

# 语言项目社区

go 语言项目在 2009 年开源,项目的 star 数已达到 9 万。根据 github 提供的数据 [13],截止 2021 年 10 月 20 日共有 166 人提交了超过 5 万次代码,其中 go 语言项目成员占比 28.9%,贡献占比 64.9%,google 员工(非语言项目成员)占比 24.7%,贡献占比 17.83%,贡献趋势如下图:

go语言编译器哪个好用(go语言ide开发工具)

go 语言项目代码提交情况

从代码提交情况来看,大部分贡献来自 google 内部,近三年来每年的提交人数稳定在 70~80 人。

参与社区提交 issue 的用户数量也在持续增长,不过目前开启中的 issue 仍有超过 7000 个,有近一半为“待调查分类”,可能为无效的 issue。

go语言编译器哪个好用(go语言ide开发工具)

go 语言项目 issue 创建情况

除了语言本身项目,语言的社区其实是更加广义的,使用 go 语言的开发者有一个可爱的昵称 “gopher”。

# “gophers” 社区

在 golanguk 2015 会议上,damian gryski 提到了 “gophers” 的文化,这是开发者被 go 吸引进而成为 “gopher” 的原因 [14]。“gophers” 的社区文化:

– code
– gofmt- if err != nil { … }- go vet- go build -race- golint (codereviewcomments)- godoc.org/github.com/user/package- go get- limited use of interface{}- social- simple is better than complex- performance matters- costs are visible

slashdata 在 2021 年初发布的开发者调研显示 go 开发者人数已超过 200 万,社区人数排行第十 [15]

go语言编译器哪个好用(go语言ide开发工具)

编程语言社区人数

在官方调研报告中,约半数开发者清楚了解如何给社区贡献,而感到自己的贡献是受欢迎的开发者比例约为 60%,这两个比例都在逐年提升 [12]。接受调研的开发者其实已经是相对活跃的,主观感受会导致调研结果有误差,但整体来看,仍有越来越多开发者愿意参与到社区贡献中。

go语言编译器哪个好用(go语言ide开发工具)

go 开发者调研报告 2020:社区满意度

活跃于社区的开发者通过邮件、媒体论坛、固定会议等交流 [16],有约 30% 开发者会频繁参与到开源项目中[12],但更多开发者并不会发出声音,他们在实践中使用 go,也切实的从社区资源中获益。

  • 邮件列表:golang-nuts、golang-dev、golang-announce
  • 用户群和会议:gobridge、godiscourse、gophercon
  • 媒体论坛:the go forum、gophers slack channel、golang news、twitter、stack overflow、reddit 等

# 应用 #

github 上 go 为主要语言的开源项目已超过 10 万个,约 24 万开发者在这些开源项目中提交 pr [17]

go语言编译器哪个好用(go语言ide开发工具)

github 上每月新创建的 go 语言项目数

官方调研报告显示,go 应用最多的领域是 web 开发,此外也被广泛应用于数据库、devops、网络编程和系统编程;在科学计算、手机等方面的应用较少 [12]

go语言编译器哪个好用(go语言ide开发工具)

go 开发者调研报告 2020:应用领域

这一点从开源项目中也可以了解到,2021 年截止 9 月最活跃的仓库(根据 pr 数量排序)基本上都与数据库、微服务平台和容器编排相关 [17]。go 已成为云基础架构的语言,这绝不是偶然,最初 go 的设计目的就是让 google 工程师能更高效的编写“云端”软件。

go语言编译器哪个好用(go语言ide开发工具)

2021 年 github 活跃仓库(根据 pr 数量排序)top 10

2013 年 matt stine 首次提出云原生(cloudnative)概念,2015 年云原生计算基金会(cncf,cloud native computing foundation)成立,致力于发展推广云原生技术。cncf 给云原生的定义中提到了目前的代表技术包括容器、服务网格、微服务、不可变基础架构和声明式 api 等 [18]

图片可上下滑动

go语言编译器哪个好用(go语言ide开发工具)

云原生基础设施的很多代表性项目均为 go 语言实现,这些技术的普及又带动了 go 语言的推广,可以说 go 语言和“云”是相互成就的。

  • 容器应用:docker、kubernetes
  • 数据库应用:etcd、tidb
  • 微服务框架:go kit、go micro、gizmo
  • web 框架:gin、echo、beego

国内如 pingcap、腾讯、百度和京东等大公司均有 go 语言的应用,2020 年 jetbrains 的开发者生态系统调研中,中国有 16% 的开发者在使用 go 语言 [19]

go语言编译器哪个好用(go语言ide开发工具)

go 语言开发者地域分布

# 总结 #

回顾 go 语言的发展情况,我们可以清楚地看到:

1. 针对开发痛点的语言特性:go 从语言层面支持并行,部署简单,很好的解决了软件开发各维度规模化中出现的痛点。

2. 低学习曲线:可以快速上手并投入实际开发工作。

3. 开发者体验不断改善:开源社区运营,有完整的工具链、标准库和一些不错的开发框架。

4. “杀手级”应用:docker、kubernetes 出现,云计算技术不断完善普及,云原生概念兴起。

5. 巨头公司支持:大量国内外公司在使用 go 语言开发,也会作为 go 语言发展的支持后盾。

技术发展过程中,会顺应需求出现不同的开发工具或者说材料,go 语言所有的特点都是为了实现更加高效的大规模开发而生,至少在云原生领域,go 语言的地位已很难动摇。