背景
- 硬件技术更新快,性能逐步提高,现有的主流编程不能合理利用多核多cpu的优势。
- 软件系统复杂,维护成本高,缺乏一个足够简洁高效编程语言。
- 风格不一
- 计算力不够
- 并发支持不友好
- c/c++项目编译慢(静态编译),存在内存泄露问题
诞生
思想
**less can be more** 大道至简才是最难的
创始人
Ken Thompson(肯·汤普逊):1983年图灵奖、1998年美国国家技术奖得主,他与Dennis Ritchie是Unix系统的原创者。Thompson也发明了C语言、B语言,同时也是C语言的主要发明人。
Rob Pike(罗布·派克): 加拿大人,曾是贝尔实验室的Unix团队和Plan 9操作计划的成员。他与Thompson公事多年,并共创出广泛使用的UTF-8字元编码。(ps:Go语言的图标-gopher 囊地鼠,是Rob Pike老婆制作的)
Robert Griesemer:曾协助制作Java的HotSpot编译器,和Chrom浏览器的JavaScript引擎V8.
里程碑
2007年,谷歌工程师Ken Thompson、Rob Pike、Robert Griesemer开始设计一门全新的语言,这是Go语言的最初原型。
2009.11.10 ,Google将Go语言以开放源代码的形式向全球发布。
2012.03 Go1.0版本发布,go tool pprof,go vet
2013.05 Go1.1版本发布,优化语言(编译器,gc,map,go 调度器)和提升它的性能,加入竞争检测,重写调度器(GMP)。
2013.12 Go1.2版本发布,go tool cover
2014.06 Go1.3版本发布,这个版本对栈管理做了重要的改进。栈可以申请连续的内存片段,提高了分配的效率。sync.Pool,支持服用结构体,减少申请内测的次数,进一步优化通道。
2014.12 Go1.4版本发布,支持andeoid,支持go generate
2015.08.19 ,Go1.5版本发布,本次更新中移除了“最后残余的C代码”,请内存管理方面权威专家Rick Hudson对GC进行重新设计(重要的修正),支持go tool trace
2016.02 Go1.6版本发布,https默认支持http2,降低gc等待时间
2016.08 Go1.7版本发布,contxt包发布,优化编译
2017.2.16 Go1.8版本发布,优化gc停顿时间1ms以下,改进defer
2017.8.24 Go1.9版本发布,支持别名声明,sync.Map加入
2018.2.16 Go1.10版本发布,test心中智能cache
2018.8.24 Go1.11版本发布,支持Go modules
2019.2.25 Go1.12版本发布,基于analysis包重新go vet
2019.9.03 Go1.13版本发布,改进sync.Pool gc运行时不清楚pool,引用换成来清理两次gc pool中无用实例。重写逃逸分析,减少堆内存申请
2020.2.25 Go1.14版本发布,改进defer/页分配器/timer等性能。goroutine支持异步抢占
2020.8.11 Go1.15版本发布,
2021.2.16 Go1.16版本发布
优势
特色
- 语法简洁、开发快速、可读性
- 并发(GMP goroutine/chanel)、有趣、开源
- 内存管理gc、数组安全、静态编译迅速
特征
- 自动垃圾回收
- 更丰富的内置类型
- 函数多返回值
- 错误处理
- 匿名函数和闭包
- 类型和接口
- 并发编程
- 反射
- 语言交互性
对比
c适合底层
java适合应用层
python适合脚本/人工智能
go适合做微服务
- OOP 面向对象
- 支持函数式编程(匿名函数/闭包)
- GMP goroutine和channel