[译]为什么你应该学习Go语言?(下)

与其他的现代高级语言相比,如 Java 或 Python,使用 C、C++ 的最大优势,就在于性能,因为 C/C++ 均为编译型语言,而非解释型语言。(扩展: 如何理解编译型语言、解释型语言? )

对于处理器来说,可以直接识别运行的是二进制文件。对于我们熟知的现代高级语言,当你编译一个用 Java 或者其他基于 JVM 的语言构建的应用程序时,它不会直接生成二进制文件,而是将人类可读的代码编译为字节代码,这些字节代码可以被 JVM 或者在底层操作系统之上运行的其他虚拟机所理解。当需要真正执行的时候,由虚拟机解释这些字节码,再将他们转化为处理器能理解的二进制文件。

对于 C/C++ 这类编译型语言来说,在执行周期中省略了编译为字节代码这一步来提高性能,不依赖 VM(虚拟机) 执行,而是直接将人类可读的代码编译为二进制文件。

虽然 C/C++ 这类语言的性能优势明显,但是,在这些语言中释放和分配变量是一件极其痛苦的事情。而大部分现代高级编程语言在这方面又是具有优势的,它们会使用垃圾回收器或者引用计数的算法来处理对象的分配和移除。

那么有没有一种语言,能够取两家之长呢?

Go 恰恰做到了两全其美,Go 像一些底层语言(如:C/C++ )一样,是一门编译型语言,这意味着它的性能几乎接近于底层语言,它实现了垃圾回收来分配和删除对象。因此,不再需要使用 malloc() 和 free() 声明了!这太酷了!

Go 项目易于维护

我要告诉你一件事情,Go 没有像其他语言一样复杂的编程语法,Go 的编程语法简洁明了。

Google 的 Go 语言的设计者,在创建这门语言的时候就考虑到了这一点。由于 Google 拥有庞大的代码库,成千上万的开发人员都工作在同一个代码库上,所以对于项目外的其他开发人员而言,代码应该易于理解,并且代码间的耦合也应该尽量小。只有这样,才能使代码易于维护和修改。

Go 有意摒弃了一些现代面向对象编程语言的功能特性。

  • 没有类概念 。 所有事务均使用 package 分隔,使用结构体来替代类概念。
  • 不支持继承 。这使得代码易于修改。在 Java 或者 Python 之类的其他语言中,如果类ABC继承了类XYZ,当开发者对类XYZ进行修改后,则有可能会对继承XYZ的其他类产生副作用。通过摒弃继承,也使得代码更易于理解(因为在查看一段代码时,没有超类)
  • 没有构造方法
  • 没有注解
  • 没有泛型
  • 没有异常

上述改变使得 Go 与其他语言截然不同,并且使 Go 的编程体验也与其他语言不同。你可能不喜欢这些改变,但是仔细想想,离开了这些繁杂的编程语法,就没有办法编写应用程序了么? 你可能要做的,就只是再多写2–3行来适应而已。但从积极的方面来说,这些改变将使你的代码更加的整洁、准确、易读。

从上图可以看出,Go 几乎与 C/C++ 一样高效,同时,代码语法也能够像 Ruby、Python 一样简单。所以对于开发者和处理器性能来说,这是双赢的!

与 Swift 等其他新语言不同 ,Go 的语法体系非常稳定。自2012年首次公开发布1.0版以来,它一直保持不变。这使得 Go 可以向后兼容。