30

什么是 Go 语言?

 4 years ago
source link: http://blog.huangz.me/2019/what-is-go.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Note

本文摘录自即将出版的《Go语言趣学指南》, 请访问 gpwgcn.com 以获取更多相关信息。

aiia2a7.jpg!web

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/Wevxmng.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)

{提示}

当你在互联网上搜索 Go 的相关话题时, 可以使用关键字 golang 来代表 Go 语言。 这种将 -lang 后缀添加到语言名字之后的做法也适用于其他编程语言, 比如 Ruby 、 Rust 等。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK