Note
本文摘录自《Go语言趣学指南》的第 1 章《各就各位,预备,Go!》, 请访问 gpwgcn.com 以获取更多相关信息。
Go 是一门 编译 语言。 在运行程序之前,Go 首先需要使用 编译器 将用户编写的代码转化为计算机能够理解的 0 和 1 。 为了便于执行和分发,编译器还会把所有代码整合并编译成一个单独的 可执行文件 。 在编译的过程中,Go 编译器能够捕捉到程序中包括拼写错误在内的一些人为失误。
并非所有编程语言都需要编译才能运行,比如 Python 、 Ruby 和其他一些流行语言就选择了在程序运行的时候,通过 解释器 一条接一条地转化代码中的声明,但这也意味着 bug 可能会隐藏在测试尚未尝触及到的代码当中。
不过换个角度来看,解释器不仅能够让开发过程变得迅速且具有交互性,还能够让语言本身变得灵活、轻松和令人愉快。 相反地,编译语言却常常因为像机器人一样顽固不化、墨守成规而广为人知,并且缓慢的编译速度也常常为人所诟病,然而实际上并非所有编译语言都是如此。
我们想要构造出这样一种语言, 它不仅可以像 C++ 和 Java 这类静态编译语言一样安全、高效, 并且还可以像 Python 这类动态类型解释语言一样身轻如燕并且充满乐趣。 —— Rob Pike,《极客周刊》(详情请见mng.bz/jr8y)
Go 在考虑软件开发的 体验 方面可谓煞费苦心。 首先,即使是大型程序的编译也可以在极短的时间内完成,并且只需要用到一条命令。 其次,语言排除了那些可能会导致歧义的特性,鼓励可预测和简明易懂的代码。 最后,Go 为 Java 等传统语言死板的数据结构提供了轻量级的替代品。
Java 避免了 C++ 当中许多不常见、难懂和令人迷惑的特性, 根据我们的经验, 这些特性带来的麻烦要比好处多得多。 —— James Gosling,《Java:概述》
每一种新编程语言都会对以往想法进行改良。 与早期语言相比,在 Go 里面高效地使用内存将变得更为容易,出错的可能性也更低,并且 Go 还能利用多核机器上的每个核心获得额外的性能优势。 很多成功案例都会把性能提升列举为转向 Go 的其中一个原因。 比如根据 mng.bz/Wevx 和 mng.bz/8yo2 的记载, Iron.io 只用了 2 台 Go 服务器就替换掉了他们原来使用的 30 台 Ruby 服务器; 而根据 mng.bz/EnYl 的记载, Bitly 在使用 Go 重写原有的 Python 应用之后也获得了持续、可测量的性能提升,这导致他们在之后把自己的 C 应用也“更新换代”成了相应的 Go 版本(详情请见 mng.bz/EnYl )。
Go 不仅像解释语言一样简单和有趣,它还拥有编译语言快如闪电的性能优势以及坚如磐石的可靠性,并且由于 Go 是一门只包含几种简单概念的小型语言,所以它学习起来也相对比较快。 终上所述,我们就得出了以下 Go 箴言:
Go 是一门开源编程语言, 它可以大规模地生产出 简单 、 高效 并且 可信赖 的软件。 —— 《Go 品牌手册》(Go Brand Book)
Tip
当你在互联网上搜索 Go 的相关话题时, 可以使用关键字 golang 来代表 Go 语言。 这种将 -lang 后缀添加到语言名字之后的做法也适用于其他编程语言, 比如 Ruby 、 Rust 等。