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

原文地址 git

Go能够直接在基础硬件上运行

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

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

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

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

那么有没有一种语言,可以取两家之长呢?服务器

Go 偏偏作到了一箭双鵰,Go 像一些底层语言(如:C/C++ )同样,是一门编译型语言,这意味着它的性能几乎接近于底层语言,它实现了垃圾回收来分配和删除对象。所以,再也不须要使用 malloc() 和 free() 声明了!这太酷了!架构

Go 项目易于维护

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

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

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

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

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

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

与 Swift 等其余新语言不一样 ,Go 的语法体系很是稳定。自2012年首次公开发布1.0版以来,它一直保持不变。这使得 Go 能够向后兼容。

Go 获得了 Google 的支持。

  • 我知道这并非直接的技术优点。可是,Google 拥有世界上最大的云基础架构之一,而且已经拥有了至关大的规模。Go 是由 Google 设计、支持的,旨在解决他们在支持可扩展性和有效性方面的问题。而这些问题,都是你在建立本身的服务器时将会遇到的。
  • 除此之外,诸如Adobe,BBC,IBM,Intel甚至Medium等一些大公司也在使用Go。( Source)

结论

  • 尽管 Go 与其余面向对象语言大相径庭,但它仍然不容小觑。 Go 不只提供了媲美 C/C++ 同样的高性能,还提供了如同 Java 般的高效并发处理,与此同时,还能为你带来和 Python/Perl 同样的编程乐趣。
  • 若是你仍是没有学习 Go 的计划,那我再强调一遍,硬件限制将会给开发者编写高性能程序带来巨大压力。开发者须要对硬件有所了解,以此来对程序进行优化,使得优化后的软件,能够在更廉价、更慢的硬件设备(好比 IOT 设备)上运行,而且使终端用户在总体上得到更好的使用体验。
相关文章
相关标签/搜索