leoay的第2篇文章 3059字
1. 我和Go语言的故事
从今天开始,我要写一系列文章介绍一下我目前在项目中使用到的一门语言—— Go语言,也叫Golang(为啥叫Golang呢?我猜因为lang是language的缩写,所以拼在一起就叫Golang了),它最初是由Google的3名工程师 Robert Griesemer,Rob Pike 以及 Ken Thompson 开发的。
说到Go,记得我第一次知道Go时,还是大二(2014年)时偶然在图书馆中看到了一本讲Go语言的书,因为当时只是粗略扫了一眼,没有细看,所以我现在始终想不起来书的名字了,当然更不记得书中的内容,只有一点点残存记忆留在大脑,大概意思就是:当前虽然使用Go语言开发的人不是很多,但是却是一门非常具有潜力的语言,未来可能会广泛应用。
那么现在呢?时间过去了差不多5年多,现在看看Go语言,可以用热火朝天这个词形容,无论是在区块链,还是云计算等一些领域,都有它的身影,我们也看到不少大小厂都在使用Go进行开发,可见那本书的作者对Go语言发展趋势的预测与当前的实际情况还是很吻合的。
虽然我听说过Go已经好几年了,但是对于我来说,Go语言还是一门比较陌生的语言,因为我真正将Go语言应用到项目中也没有多久,所以,我也是刚刚开始学习这门语言。这也是我的学习风格,大多数情况是我需要用到什么,就去学习什么,无论学习什么东西,我都希望尽可能地能将它与现实中的应用场景结合,我觉得这是一件有益的事儿。
那么,我为什么想要写一系列介绍Go语言的文章,因为我在项目中用了Go之后,发现它有非常多的优点,它有着严格的编程规范与格式,可以直接编译成机器语言,同时,因为有着丰富的依赖包,所以网络编程超级方便,可以像写python那样简便高效,同时又能像C语言一样高效执行等等,可以说兼具多种优点。
我写这一系列文章,也是为了记录一下自己学习的过程,把自己学到的东西转化为文字,转述给其他人看,这样可以帮助我加深理解,也验证一下自己的掌握程度。另一方面,也顺便记录一下学习过程中遇到的坑,以期望能给后来者指路。
如果你也对Go感兴趣或者因为项目中要用到Go,那么就和我一起来学习吧!说Go,咱就Go!
2. 一封邮件
说到Go,还要从2007年9月25号那个下午说起,下午3点12分,Rob Pike给Robert Griesemer、Ken Thompson回复了一封邮件,这封邮件的主题是关于编程语言讨论的,其实就应该是讨论Go语言,正文的大致意思是:
在开车回家的路上,我得到了一些灵感。 给这门编程语言取名为“go”, 它很简短,易书写。工具类可以命名为:goc、gol、goa。交互式的调试工具也可以直接命名为“go”。语言文件后缀名为.go
邮件的原文如下图所示:
就这样Go语言的初步初步想法就出来了,一切刚刚开始。不过,时间一转眼就来到了2009年,Go语言开发团队正式对外发布这一门新的语言,这里的发布其实就是开源。由于开源发布的那一天是11月10日,所以Go语言团队将这一天定为Go语言的官方生日。
Go语言吉祥物(gopher, 囊地鼠)
刚开始时,Go语言的源代码还是托管在code.google.com上的,后来逐步迁移到Github上了,现在的仓库地址是:https://github.com/golang/go.git
我猜Go语言团队想让更多的人认识这么优秀的语言,所以才放到Github上,因为并不是每个人都能访问*.google.com。
我们现在来看Go语言从2007年正式被提出,到2009年,正式向外开源发布,仅仅用了短短两年时间,好像是一件挺容易的事儿。
实则不然。在这两年的时光中,Go语言发开团队也是经历了种种挫折与磨难,做很多不为人知的工作,才最终创造了Go。
从前面的邮件中,我们可以看到Rob Pike最先提到打算搞一门新的语言,那么,为什么Rob Pike想要搞一门新的语言呢?这其中还真有一个比较实际的原因:
大概是07年的9月份的某个下午,当Rob Pike正在Google的分布式编译平台上进行C++编译时,由于编译的过程太慢了,所以他就习惯性地与Robert Griesemer讨论一些程序设计语言的一些关键问题,因为面临着编译时等待时间太过漫长的痛点,所以他们当前讨论的话题也是关于怎么改进编程语言才能降低代码编译时间,提升工作效率。
Rob Pike认为简化编程语言比在臃肿的语言上不断增加新的特性更有意义,Robert Griesemer也比较认同这个观点。所以,在等待了漫长的编译时间之后,他们立马说服了身边的Ken Thompson,准备搞一个大事情,这个事情就是一个叫Golang的项目。此时,Golang的种子算是埋下了。
3. 三件重要的记事
之后在Go语言的发展过程中也出现了三件事,对其发展产生了一定影响。
第一件事是 Ian Lance Taylor为刚发展不久的Go写了一个gcc 编译器前端,算是Go语言编译的早期版本吧。
这算是Go语言团队在开发设计Go语言的过程中遇到的第一个重大惊喜吧。同样也有一封邮件记录下了这一重要的事件:
这封邮件是2008年的6月7日晚上,Ian Lance Taylor发给 Robert Griesemer、Rob Pike、 Ken Thompson 的,邮件内容的大致意思就是:
我的同事向我推荐了这个网站 http://…/go_lang.html 。这似乎是一门很有趣的编程语言。我为它写了一个 gcc 编译器前端。虽然这个工具仍缺少很多的功能,但它确实可以编译网站上展示的那个素数筛选程序了
此事一出,Ian Lance Taylor也算是正式加入Go语言开发的阵营了,这也对Go项目起到不小的积极影响,也从另一个方面证明了Go项目的可行。语言的第二次实现对制定语言规范和确定标准库的过程至关重要,同时也保证了它较高的可移植性。打那儿后,Ian Lance Taylor就成了设计和实现Go语言及其工具的核心人物。
那么第二件比较重要的事情呢,就是 Russ Cox 在2008年带着他的语言设计天赋和编程技巧加入了刚成立不久的 Go 团队。Russ 发现 Go 方法的通用性意味着函数也能拥有自己的方法,这直接促成了 http.HandlerFunc 的实现,这是一个让 Go 一下子变得无限可能的特性。
同时, Russ 还提出了更多的泛化性的想法,比如 io.Reader 和 io.Writer 接口,奠定了所有 I/O 库的整体结构。
加速Go语言发展的第三件事情,就是安全专家 Adam Langley 帮助 Go 走向 Google 外面的世界。我们看到当下Go语言在全世界为众人所知,这其中 Adam Langley 可以说是功不可没。
比如我们熟悉的Go语言官网( http://golang.org),最初就是由他创建的,而且我们熟悉的build dashboard也是出自他手,但是要说他最大的功劳,还属于创建了 cryptographic库。
从这个名字,我们就可以看出,这个库是与加密解密相关的,虽然这个库刚开始的时候还不太完善,但是后来却成为很多重要的网络与安全软件的基础,也成为了Go开发历史的关键组成部分。而且像Cloudflare这样的许多网络基础设施公司重度依赖Adam在Go项目上的工作。
就连我们熟知的beego(一种基于Go的web框架)的作者在设计beego的时候,也寻求了Adam的大量建议。
那么第四件重要的事情想必很多朋友都知道,就是Docker的出现,可以说Docker极大地推动了云计算的发展进程,而Docker正好是用Go语言开发的,所以Docker也进一步促进了Go语言的发展与普及,后来随着云计算的发展,又出现了像K8S这样的项目,它仍然是用Go语言开发的,可以说Go语言是天生的"容器语言"。
4. 对Go语言的一点儿展望
Go语言从2009年发布,到如今2020年已经有10+年的发展史了,从一些资料文档以及自己亲身经历来看,Go语言的发展不可谓不迅猛。我认为这得益于它两个比较突出的优点:
当然,Go语言的优点远远不止于此,这里只是说了两个比较突出的优点,可以说Go语言就是21世纪的C。
除此以外,Go语言在特征上是基于编译、垃圾收集以及具有并发能力的语言,同时,它专门针对多处理器系统应用程序的编程进行优化,因此在运行速度上与C/C++十分接近,但是它更加强大,因为其安全性和并发性。同时,Go语言的编译速度也是相当完美,极大地提高了程序员的开发效率,所以基于以上的一系列优点,我还是非常看好Go在未来技术场的发展前景的,我也计划下半年多研究一些开源的Go项目。
下一篇我们将正式开始学习Go语言的开发知识了,创作不易,喜欢的朋友点赞留言,我是陪你在技术路上奋进的leoay!