1.1 Go语言概述
如果你在阅读本书,那说明你可能已经被 Go 所吸引。因此,本节将简要说明是什么让Go变成一门强大的编程语言。
在过去的几十年中,软件工程有了很大发展。大多数现代系统不再由一个人,而是由多名程序员组成的团队进行编写——有时候团队甚至由成百上千个程序员组成。如今,代码必须具备可读性、可表达性和可维护性,以保证系统具有多年的可用性。同时,在我们这个快速发展的世界中,最大程度地提高敏捷性来保证尽早上市是至关重要的。编程也应该顺应这一趋势,公司应尽可能地保证程序员在阅读、编写和维护代码时的高效。
为了应对这些挑战,谷歌公司在2007年创建了Go语言。从那时起,很多组织开始使用这门语言来应对各种使用场景:API、自动化、数据库、CLI(命令行接口)等。如今,很多人认为Go是云时代的语言。
从功能上看,Go 没有类型继承、异常、宏和偏函数,不支持惰性求值或不变性,没有运算符重载、没有模式匹配等。为何这门语言中缺失这些特性呢?官方的FAQ给了我们一些解释:
为何Go没有某个特性呢?Go不具备你最喜欢的特性可能是因为这个特性不合适,或是它影响了编译速度或设计的清晰度,又或者它会使基本系统模型变得过于复杂。
通过功能数量来评判一门语言的质量可能不是一个准确的衡量标准。至少这不应是评价Go的标准。Go作为很多组织大规模采用的语言,具有以下几个基本特征。
■ 稳定性:尽管Go经常更新(包括升级和安全补丁),但它仍然是一门稳定的语言。有人甚至认为这是Go最重要的特性之一。
■ 表达性:我们可以通过阅读和编写代码的自然和直观程度来表示编程语言的表达性,较少的关键字数量和解决普通问题的有限方法让Go变成大型代码工程的表达性语言。
■ 编译速度快:作为开发者,还有什么是比长时间等待程序编译来测试代码更让人气愤的呢?快速编译一直是语言设计者的目标。反过来讲,减少编译时长就能提高生产力。
■ 安全性:Go 是静态类型语言。因此,它有严格的编译规则来确保代码在大多数情况下是类型安全的。
Go从一开始就具有可靠的特性,比如用goroutine和channel(通道)来提供强大的并发性,使我们不依赖外部库就能构建高效的并发应用。通过观察并发对于现代应用的重要性便可说明,Go为何是一门现在以及可预见的未来都适合使用的语言。
有些人认为 Go 是一门简单的语言。从某种意义上看,这的确不能说是错的。因为一个新手可能花不到一天的时间就能掌握这门语言的主要特性。如果 Go 很简单,为什么还要专门读一本以错误概念为中心的书呢?