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 语言的三位创始人在 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 确实不是一门“有趣”的编程语言,而更看重工程实践中的实用性,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 包的两个新函数和语言类转换规则的扩展) 。
推荐阅读
- 电脑英语背单词软件哪个好 免费背单词最好的软件排名
- excel程序在哪个文件 excel基础知识笔记
- 建站cms哪个好 论坛开源网站源码
- mac电脑安卓模拟器哪个好用 适配m1的安卓模拟器
- k歌耳麦和耳机哪个效果好 k歌耳机品牌排行榜
- 立冬鹅应该选定在哪个阶段进鹅苗呢
- 01车厘子和樱桃哪个营养好
- 风扇品牌哪个好 落地风扇十大名牌排名
- 回南天最严重是哪个城市 2022青岛有回南天吗
- 蜜蜂惊喜社是哪个公司的 蜜蜂惊喜社和薇娅有关系吗