Go语言将在未来成为下一个王者,消灭Java和Python?

2,171 阅读6分钟

在过去几年中,新的编程语言有所增加:Go或GoLang。 没有什么能让开发人员疯狂而不是新的编程语言,对吗?近几年来,Go语言真是越来越火了。我们来看看Tiobe世界编程语言排行的最新排名,Go已经从去年的第14名上升到今年的第十名了。虽然Java仍然占据编程界的老大哥的地位,但是它所占的份额确实是有所下滑。还有C和C++的市场份额也是逐年下滑。

就现在的条件来说我们无法向处理器添加越来越多的缓存以提高性能,因为缓存具有物理限制:缓存越大,获得的速度越慢。为处理器添加更多核心也有其成本。而且,这无法无限扩展。这些多核处理器可以同时运行多个线程,从而为图像带来并发性。因此,如果我们不能依赖硬件改进,唯一的出路就是提高性能的软件。但遗憾的是,现代编程语言效率不高。

现在的大多数现代编程语言(如Java,Python等)都来自90年代的单线程环境。 大多数编程语言都支持多线程。 但真正的问题是并发执行,线程锁定,竞争条件和死锁。 这些事情使得很难在这些语言上创建多线程应用程序。

例如,在Java中创建新线程不是内存有效的。 由于每个线程消耗大约1MB的内存堆大小,并且最终如果你开始旋转数千个线程,它们将对堆施加巨大压力并导致由于内存不足而导致关闭。 此外,如果要在两个或多个线程之间进行通信,则非常困难。

另一方面,Go于2009年发布,当时多核处理器已经上市。 这就是为什么Go是在保持并发性的基础上构建的。 Go有goroutines而不是线程。 它们从堆中消耗了大约2KB的内存。 因此,您可以随时旋转数百万个goroutine。

为什么Java在逐渐被Go抢占风头呢?首先,Java能够做到的事情Go都能够做到,甚至能够做得更好。现在Java用于服务端开发的最多,而Go完全能够胜任。在Java里面有分布式,多线程,微服务,RPC等,用Go语言也完全不虚,我们公司的分布式,微服务架构就有用Go实现的,一样非常方便快捷。时下流行的趋势是大数据,人工智能,数据挖掘,机器学习等,这些用Java做起来很麻烦,都有相应的编程语言和框架,用Go自然也可以做。在这方面Java和Go的能力基本相当。

其次,用Go语言开发更迅速。用Java语言编程,一个简单的增删改查的业务你要怎么做?创建实体类JavaBean,生成Mybatis查询脚本,写Service,最后还要写Controller。整个代码加起来随随便便都有300行以上了。如果用Go语言来书写,代码层次上来看可以简洁很多。当然,用Go做MVC架构的开发大致流程和Java也没差。

再次,和臃肿庞大的Java框架相比,Go就显得非常迷你了。Go语言是一款极为简约的编程语言,他的框架也不似Java相关框架那么庞大臃肿。和它的开发效率一样,它的执行效率也是各大编程语言里面的佼佼者。它可以在一个进程中执行无数个写成,用来确保它的高效性。现在的很多微服务框架都选用Go作为开发语言,就是因为它快速并且高效。

其他好处是:

Goroutines具有可增长的分段堆栈。 这意味着他们只在需要时才会使用更多内存。

Goroutines的启动时间比线程快。

Goroutines带有内置的原语,可以在它们之间(通道)安全地进行通信。

Goroutines允许您在共享数据结构时避免使用互斥锁。

此外,goroutines和OS线程没有1:1映射。 单个goroutine可以在多个线程上运行。 Goroutines被多路复用到少量的OS线程中。

Go直接在底层硬件上运行。与其他现代高级语言(如Java / Python)相比,使用C,C ++的最大好处是它们的性能。 因为C / C ++是编译的而不是解释的。

处理器理解二进制文件。 通常,在编译项目时使用Java或其他基于JVM的语言构建应用程序时,它会将人类可读代码编译为字节代码,JVM或在底层操作系统之上运行的其他虚拟机可以理解这些代码。 执行时,VM会解释这些字节码并将其转换为处理器可以理解的二进制文件。

而在另一方面,C / C ++不会在VM上执行,并且从执行周期中删除一步并提高性能。 它直接将人类可读代码编译为二进制文件。

但是,在这些语言中释放和分配变量是一个巨大的痛苦。 虽然大多数编程语言使用垃圾收集器或引用计数算法处理对象分配和删除。

Go带来了世界上最好的一面。 像C / C ++这样的低级语言,Go是编译语言。 这意味着性能几乎接近较低级别的语言。 它还使用垃圾收集来分配和删除对象。 所以,不再有malloc()和free()语句! 凉!!!

用Go编写的代码易于维护,Go语言没有像其他语言那样疯狂的编程语法。它的语法非常整洁。谷歌Go的设计者在创建语言时就考虑到了这一点。由于谷歌拥有非常庞大的代码库,成千上万的开发人员正在开发相同的代码库,因此对于其他开发人员来说代码应该很容易理解,而代码的一段代码应该对代码的另一部分产生最小的副作用。这将使代码易于维护且易于修改。

以上更改使Go与其他语言有很大不同,它使Go中的编程与其他语言不同。 你可能不喜欢上面的一些观点。 但是,如果没有上述功能,您就无法对应用程序进行编码。 您所要做的就是再写2-3行。 但从积极的方面来说,它将使您的代码更清晰,并为您的代码增加更多清晰度。

Go是由Google设计和支持的。 谷歌拥有世界上最大的云基础设施之一,并且规模庞大。 Go由Google设计,旨在解决支持可扩展性和有效性的问题。 这些是您在创建自己的服务器时将面临的相同问题。更多的是Go也被一些大公司使用,如Adobe,BBC,IBM,Intel。

尽管Go与其他面向对象的语言非常不同,但它仍然是同一个野兽。 Go为您提供高性能,如C / C ++,超高效的并发处理,如Java,以及Python / Perl等代码的乐趣。