1.1 Go 语言的 Logo


囊地鼠:北美的一种地鼠,也就是土拨鼠。。它是 Go 语言作者的老婆帮忙画的。

Rob Pike:Go 语言发明者之一,也是最主要、最核心的开发者,是贝尔实验室 Unix 小组成员之一,UTF-8的设计人!他最喜欢做的事情似乎就是

  • 发明操作系统
  • 发明编辑器
  • 发明语言

~ 哈哈,是不是感觉 完全不是一个层次的。咱们是用人家的东西去做开发,人家是 开发 工具给咱们用。

Go 语言的吉祥物,代表的就是 可爱 Gordon【比心心】

谷歌工程师 20% 时间

谷歌的 "20% 时间" 是一种工作方式,它允许工程师拿出工作中20% 的时间 来研发自己喜欢的项目。比如 语音服务 Google Now、谷歌新闻 Google News、谷歌地图 Google Map 等等 都是 在 20% 时间开发出来的产物!

Go 语言在最初 也是 20% 时间的产物之一。


1.2 为什么需要这样的一门新语言

最近十年来,C/C++ 在计算领域没有得到很好的发展。但是我们知道,也没有什么新的系统级别的编程语言出现嘛。并且我们知道开发程度和系统效率目前很多清空下是不能兼得的。要么执行效率比较高!要么开发低效的项目程序。比如 Java、.net 就是关注于开发的,不太关系什么高效的执行速度、编译速度。

那么我们在想,是否可以开发出一款 两方面优点于一身的编程语言呢?答:Go 语言横空出世了!

传统的语言比如 C++,太过于复杂,虽然很高效,也可以很好的开发程序。但是要想做到这一步,是需要很多时间的!动态语言 如Python,由于没有强类型的约束,很多问题需要在运行时才能发现,这种低级错误更应该交给编译器来发现。其实目前看似很好的语言,在某一方面 有极度放大的缺点。

  • 人力成本越来越高
  • 机器越来越便宜
  • 机器的性能越来越厉害

所以如何在开发效率和运行速度上达到平衡就是一个问题了,即如何很好的开发项目,并且效率不太低,还不是很复杂。成为了一种问题或奢求!

Go 语言出现之前,无论汇编语言,还是动态的脚本语言,在执行效率和开发效率上时无法兼得的!在Go 语言出现后,我们发现 实际上这两方面 是可以兼得的,只是没人去做!

Go语言三个作者:Rob PikeKen ThompsonRobert Griesemer

Rob Pike:曾是贝尔实验室的Unix团队和Plan 9 操作系统计划的成员,他与Thompson 共事多年,并共创出广泛使用的 UTF-8 字节编码。

Ken Thompson:主要是 B语言、C语言的作者、Unix 之父。1983 年图灵奖和1998年 美国国家技术奖的得主!他与 Dennis Ritchie 是Unix 的原创者。Thompson 也发明了后来衍生出C语言的B语言。

Robert Griesemer:在开发 Go 之前,他是 Google V8、Chubby 和 HotSpot JVM 的主要贡献者!


1.3 Go 语言的发展

  1. 名字的来源

Go 其实并没有太深的含义,主要是 简短,当然不排除Tob Pike 当初的主观性,因为我们脑子里的点子,并不是凭空出现的,肯定是借助了其它东西。但是 go 这个名字最核心的地方真的就在于 简短!易书写。工具类可以命名为:goc gol goa 交互式的调试工具 直接 go 即可,文件的后缀 .go 是不是感觉很妙,而且很好记!

  1. gcc 编译器 前端

lan Lance Taylor 在 2008年 6月 7日 发送了一封邮件,关于 Go Gcc 编译器前端的邮件!
也就是说这个大佬,给 go 写了一个 gcc 编译器前端,虽然这个工具缺少了很多的功能,但是它可以编译在网站上展示素数筛选程序。这已经是一个很大的进展了!

  1. http.HandlerFunc、I/O 库

Russ Cox 在 2008 年带着他的语言设计天赋和编程技巧加入了 更成立不久的 Go 团队,他发现 Go 的方法居然那么具有通用性!这也就意味着函数也能拥有自己的方法??
后期就促成了 http.HandlerFunc 的实现,也就是 Go 语言 WEB 开发的基础。
Russ 还提出了更多的泛化性的想法,比如 io.Reader 和 io.Writer 接口,奠定了 所有 I/O 库的整体结构。

  1. cryptographic

安全专家 Adam Langley 帮助 Go 走向了 外面的世界。

他为 Go 语言创建了 cryptographic 库,使得我们 Go 的安全性得到了保障,这样才能让 Go 往外面的世界 迈步!

  1. 简化工作

Go 从名字开始,就意味着简化,排除所有的复杂。
所以 他们认为,嘉华编程语言相比于在臃肿的语言上不断增加什么新特性,才是更大的进步和改革。随后就说服了身边的 Ken Thompson 大佬,一起 发起了 GoLang 这个项目,作为自由时间的实验项目!

  1. Google 全方面的支持

Google 在得知了 Go 语言这个事情后,发现了 这款语言的巨大潜力,开始全力支持 Go 语言的设计和开发!这让 Go 语言的发行更快一步。

  1. Go 语言发布了第一个版本。

2009 年 11 月 Go 发布了第一个版本!

  1. GC时延问题终于得到解决

2015年 go 1.5发布,这个版本却被认为是 历史性的见证。它完全移除了C语言的部分,大胆的使用了 Go 本身去编译 Go 的新版本。只有少量的代码使用了 汇编,另外 他们请来了 内存管理方面的权威专家 Rick Hudson,对 GC 进行了重新的设计,他们认为之前的 GC 就是从根上出现的问题。才导致了后期的 时延。

果然。。新的 GC,支持了 并发!而并发的支持,很简单的就解决了 时延问题。。后来的版本中,又对 GC 进行了优化,到了 1.8 版本的时候 时延已经可以控制在 1ms 之内了。这意味着 Go语言在服务端开发方面,几乎干掉了所有的弱点!!!

  1. Docker、Kubernetes 的出现

Docker 是 很出名的容器,而它就是 go 开发出来的。 可以说 go 的出现,兴起了 计算机领域的容器行业。促进了云时代的发展。

  1. 为什么学 Go
  • Go 语言是 谷歌 2009 年发布的第二款开源编程语言(是系统级别的开发语言),它也是基于编译、垃圾回收和并发的编程语言。
  • Go 语言专门针对多处理器系统应用程序的编程进行了优化,使用 Go 编译的程序可以媲美 C/C++ 代码的速度,而且非常的安全,还支持并行进程。
  • 作为 21 世纪的编程语言,其近乎C的性能和近乎解释型语言的开发效率,一级近乎完美的编译速度,真的集优质的特色于一身。
  • 最近大火的云项目,多数也是用 go 来编写的,它是最佳的选择!
  • Go 语言不臃肿,简单不复杂。拥有 C语言的简洁和性能,并且还能够开发出很多实用性的项目。可移植性还很好。