本文主要包含以下内容:
- 为什么需要一门新的语言
- Go 语言基本介绍
- Go 的发展历程
- Go 应用领域
o 语言基本介绍
在上述背景下,谷歌公司于 2009 年推出了新一代的编程语言 Go。
提起 Go 语言的出身,我们就必须将我们饱含敬意的眼光投向持续推出惊世骇俗成果的贝尔实验室。
贝尔实验室已经走出了多位诺贝尔奖获得者,一些对于现在科技至关重要的研究成果,比如晶体管、通信技术、数码相机的感光元件 CCD 和光电池等都源自贝尔实验室。该实验室在科技界的地位可想而之,是一个毫无争议的科研圣地。
这里我们重点介绍一下贝尔实验室中一个叫计算科学研究中心的部门对于操作系统和编程语言的贡献。
回溯至 1969 年,肯.汤姆逊(Ken Thompson)和丹尼斯.里奇(Dennis Ritchie)在贝尔实验室的计算科学研究中心里开发出了 Unix 这个大名鼎鼎的操作系统,还因为开发 Unix 而衍生出了一门同样赫赫有名的编程语言:C 语言。
然已经取得了如此巨大的成就,贝尔实验室的这几个人并没有因此而沉浸在光环中止步不前,他们从 20 世纪 80 年代又开始了一个名为 Plan 9 的操作系统研究项目,目的就是解决 Unix 中的一些问题,发展出一个 Unix 的后续替代系统。
在之后的几十年中,该研究项目又演变出了另一个叫 Inferno 的项目分支,以及一个名为 Limbo 的编程语言。
Limbo 是用于开发运行在小型计算机上的分布式应用的编程语言,它支持模块化编程,编译期和运行时的强类型检查,进程内基于具有类型的通信通道,原子性垃圾收集和简单的抽象数据类型。它被设计为:即便是在没有硬件内存保护的小型设备上,也能安全运行。
Limbo 语言被认为是 Go 语言的前身,不仅仅因为是同一批人设计的语言,而是 Go 语言确实从 Limbo 语言中继承了众多优秀的特性。
贝尔实验室后来经历了多次的动荡,包括肯.汤姆逊在内的 Plan 9 项目原班人马加入了 Google。在 Google,他们创造了 Go 语言。
Go 语言作为一门全新的静态类型开发语言,与当前的开发语言相比具备众多令人兴奋不已的新特性。
有人形容 Go 语言为 Go = C + Python,说明 Go 语言既有 C 静态语言程序的运行速度,又能达到 Python 动态语言的快速开发。Go 语言最主要的特性:
- 自动垃圾回收
- 更丰富的内置类型
- 函数多返回值
- 错误处理
- 匿名函数和包
- 类型和接口
- 并发编程
- 反射
- 语言交互性
针对上面所列举的诸多特性,这里简单介绍几个:
1. 自动垃圾回收
C/C++ 最头疼的就是指针问题,一不小心就野指针了或者又越界了。在 Go 语言里再也不用担心,也不用考虑 delete 或者 free,系统自动会回收。
2. 函数可以返回多个值
这个很神奇,大多数语言只能返回一个值,Go 语言可以返回多个值。这个功能使得开发者再不用绞尽脑汁的想到底怎么返回值的设计,也不用为了传值专门定义一个结构体。
3. 并发编程
Go 语言天然并发,只需要关键字 go 就可以让函数并发执行,使得并发编程变得更为简单,这也是 Go 语言最大的优势。
4. 更丰富的内置类型
除了几乎所有语言都支持的简单内置类型(比如整型和浮点型等)外,Go 语言也内置了一 些比较新的语言中内置的高级类型,比如 C# 和 Java 中的数组和字符串。除此之外,Go 语言还内置了一个对于其他静态类型语言通常用库方式支持的字典类型 map。
Go 语言设计者对为什么内置 map 这个问题的回答也颇为简单:既然绝大多数开发者都需要用到这个类型,为什么还非要每个人都写一行 import 语句来包含一个库?
这也是一个典型的实战派观点,与很多其他语言的学院派气息迥然不同。
另外有一个新增的数据类型:数组切片 Slice。我们可以认为数组切片是一种可动态增长的数组。这几种数据结构基本上覆盖了绝大部分的应用场景。
当然,关于 Go 语言的语言特性,还有很多很多,这里不做一一解释。在后面学习到对应新特性时,自然会有更深的体会。
Go 应用领域
那么,Go 语言具体能做什么样的开发呢?或者说有着什么样的应用场景呢?
由于 Go 语言,具备了 Python 的简易性和传统 C++ 和 Java 的性能,可帮助开发人员构建可伸缩的应用程序,它的应用场景横跨目前互联网中非常热门的几个领域,比如分布式/云计算、微服务、大数据、区块链、大型游戏服务端开发和物联网等。
下面列举几个 Go 语言常见的应用领域。
除了上面介绍的这些,其实很多领域都能看到 Go 的影子。例如直播领域、游戏开发、AI 算法等等。在这其中 Go 为后台的调度系统、任务处理、批量的数据计算、系统监控等都提供了各种优秀的解决方案。