Go小专栏 第一期
Go的前世今生
如标题所述,这篇文章主要是来聊聊Go的历史,现状以及未来,或者也可称为Go的发展脉络。我认为任何事物存在皆有原因,技术也不例外。这篇文章主要探讨Go为什么会出现,Go的特点。
Go为什么会出现?
如果你接触过Go,就应该会知道Go被Google开源出来,Go的出现源自一次大型工程的构建,在等待漫长的构建过程中,有三位大佬开始讨论是否可以利用编程语言加快构建时间,解决目前Google在软件开发中遇到的问题呢?正是因为这次讨论,Go语言就此诞生。这三位大佬,分别是,Ken Thompson(图灵奖获得者、C 语法联合发明人、Unix 之父),Rob Pike(Plan 9 操作系统领导者、UTF-8 编码的最初设计者),Robert Griesemer(Java 的 HotSpot 虚拟机和 Chrome 浏览器的 JavaScript V8 引擎的设计者之一)。从语言的设计者角度看,Go语言可谓是身出名门。在这三位大佬的讨论中,这门编程语言要解决Google软件工程上的问题,而不是去做编程语言的创新。当时的Google面向下面的痛点
- 构建缓慢
- 依赖关系不可控
- 语言特性过多,每个工程师只会使用其中的一部分
- 代码可读性差
- 重复劳动
- 更新代价高
- 版本兼容性差
- 编写自动化工具困难
- 跨语言构建
而Go语言就是为了解决这些问题而生的,可以说Go语言是面向工程的语言。除此之外,三位大佬认为一门成功的编程语言需要保证下面三点
- 即使在规模庞大,依赖众多其他组件,在很多开发人员共同协作的程序上,也能很好的运行
- 它应该足够令人熟悉,尤其是在Google的开发者,他们更加熟悉C系语言的风格
- 它也需要足够现代,适应当时多核CPU的计算环境,比如内置并发
基于这些考虑,这三位大佬最终确定了Go语言的特点
- 足够简单,语言特性不易过多。
- 组合而不是继承,放弃传统的面向对象
- 良好的依赖管理,不允许循环依赖的出现,构建一颗清晰的依赖树
- 内置并发,借助CSP理论,内置并发原语,
channel
,select
,goroutine
- 垃圾回收, 借助运行时,管理内存。
- 错误处理,借鉴C语言的基于值比较的错误处理方式,并再其上做了一定的创新
小结
到此,我讲解了为什么Go会出现,以及Go语言的特点,理解了这些东西,我们在学习Go的语法,再能更好的理解。那么下一期,我们会聊聊Go的基本数据类型以及语法结构,并谈谈我对类型的理解。到此为止,你看完了专栏的第一篇文章,如果你想再深入了解,可以看看这篇文章 Go at Google: Language Design in the Service of Software Engineering - The Go Programming Language