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

在过去几年中,新的编程语言有所增加: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等代码的乐趣。

原文地址:https://blog.51cto.com/14214237/2376719

时间: 2024-08-30 08:05:30

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

剑指offer第二版面试题7:二叉树的下一个节点(JAVA版本)

题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 分析: 根据中序遍历的特点,要找到一个节点的下一个节点无非就是三种情况: 1.有右子树,这时只需要把其右孩子作为下一个遍历的(并不是要找的)节点,然后沿着该节点的左子树(如果有的话)出发,直到遇到叶子节点,那么该叶子节点就是其下一个要找的节点: 2.没有右子树,则判断该节点是否是其父节点的左孩子,如果是则其下一个要找的节点是其父节点: 3.如果不是其父节点

剑指Offer-57.二叉树的下一个结点(C++/Java)

题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 分析: 二叉树的中序遍历是左根右,所以如果一个结点的右子树不为空,那么这个节点的下一个节点一定是右子树的最左结点,如果右子树不存在左子树的话,就返回右子树的根结点. 如果一个结点的右子树为空,且当前结点是其父结点的左子树的根结点,那么直接返回其父节点,否则就一直访问其父结点,直到找到一个结点是其父结点的左子结点,同样返回其父结点. 程序: C++ cla

windows 下用eclipse搭建java、python开发环境

本人只针对小白!本文只针对小白!本文只针对小白! 最近闲来无事,加上之前虽没有做过eclipse上java.python的开发工作,但一直想尝试一下.于是边查找资料边试验,花了一天时间在自己的机器上用eclipse分别在windows 与 ubuntu(linux)系统上搭建了java与python的开发环境. 接下来用分别用两篇博文整理本人的搭建流程,也做一些问题总结.   一.用eclipse + jdk搭建java开发环境   本人的的系统环境为:windows 7 64位 1. 首先去官

腾讯舆情团队谈:如何发现下一个现象级游戏?

轰轰烈烈的 ChinaJoy 刚结束,各大游戏厂商又投入了新一轮产品研发和优化.回顾ChinaJoy,最受玩家追捧的当属目前最火爆的现象级游戏 IP,如<魔兽世界>.<火影忍者手游>.<冒险岛 2>等,上海 40 度的高温天也阻止不了玩家前往现场"朝圣"一把这些影响着我们生活的明星游戏.进入 2016 下半年,随着行业热捧的 VR 和电竞"元年"过半,人们正在更理性地关心:未来的"下一个"现象级游戏 IP 将从

14行脚本配置Linux下一个Java环境变量

供Java人们刚开始学习.多半Java它需要花费大量的精力在开发环境的配置,于Linux下一个,构造Java环境变量,很可能加入这一努力. 为此,我做了一个bash脚本来配置自己主动Java环境变量.你只需要的例子,下面的脚本,你下载jdk压缩成一个目录.该脚本.并根据提示输入一些信息就可以. config_java.sh #!/bin/bash jdkpath=/usr/lib/java/ sudo mkdir $jdkpath read -p "Please input the name o

Go将统治下一个10年?Go语言发展现状分析

"本文是国内Go语言大中华区首席布道师--许式伟,在QCon2015上海站上的分享.他预测Go语言10年内一定会超过C和java,并且统治这一个10年. Go语言语法及标准库变化 Go从1.0版本到现在(2015年)已经有三年多的时间,大的版本发布了五个,下面大家一起看看每个大版本分别都改了什么,当然这里不可能把所有的细节都提到,但我认为重要的会提出来. 首先是Go1.1,Go1.0于2012年4月发布,此后基本维持了每半年发布一个新版本的时间间隔.Go1.5比较例外,在Go1.5的拖累下,Go

马云思考阿里下一个15年:大数据是未来核心

关健 阿里巴巴的上市让马云成功登上中国財富状元.但他却称"连自己小区的首富都不想当". 马云表示.阿里上市后服务中小企业的初衷不会改变,会和千千万万个"小人物"共同成长. 经历过上市喜悦的马云已经在思考阿里的下一个 15 年.追求健康和快乐成为环绕这个生态的下一个目标,而这些梦想的实现离不开未来最核心的东西--数据. 大与小.分与合的绝妙 上市当日,马云亲手将一个景泰蓝版本号的淘公仔送给纽交所.他想向外界表达的意思是,powerofsmallguys,即小企业(小人

任正非反思:华为会不会是下一个美联航?(企业必需以客户为中心)

集微网 4月20日报道? 虽然任正非早已经不再具体管理华为内部事务,但是依然是华为公司的灵魂.4月18日,任正非又在内部战略预备队座谈会上谈了很多目前华为内部面临的问题. 谈话内容最令人关注的就是任正非关于“华为到底还是不是以客户为中心”的发问.任正非说道,从美联航事件看,企业必需以客户为中心. 美联航不以客户为中心,而以员工为中心,导致他们对客户这样恶劣的经营作风.华为会不会是下一个美联航?我们认为最宝贵的财富是客户,一定要尊重客户.我们以客户为中心的文化,要坚持下去,越富越要不忘初心. 巴塞

AngularJS - 下一个大框架

AngularJS AngularJS是web应用的下一个巨头. AngularJS如果为创建web应用而设计,那它就是HTML的套路了.具有数据绑定, MVW, MVVM, MVC, 依赖注入的声明式模板和出色的可测试性都是用纯客户端 JavaScript来实现的! AngularJS 是一个创建富客户端应用的JavaScript MVC框架,它组织良好,经过严格测试,多功能,强大并且十分灵活.你仍然需要具有服务端后台,但大多数的用户交互逻辑将优雅地放到客户端上处理. AngularJS是一个