为什么我认为Go语言会超越Java?

发布于 2017-11-28 作者 hujunyuan8058 3213次 浏览 版块 分享

为什么我认为Go语言会超越Java?

原创 2017-04-08 秦雯静 StuQ

作者|秦雯静
编辑|Alice Qin
虽然Java在编程语言领域仍占据主导地位,但是后起之秀,新型语言更适合现代的计算方式,尤其是在云平台中。Go——为云而生,由于其拥有并发性的操作系统以及完美的架构,使其越来越受到开发者的青睐。
“最好的编程语言时什么?”很多人都在问这个问题。但实际上,我们都知道世界上没有最好的编程语言,只有不同应用场景下最适合的编程语言。前端适合HTML、CSS、JavaScript,移动端就可以选择Android(Java)、iOS(Swift和OC);至于后台应用系统比较受欢迎的则是Java、PHP、C#、C++、C、Python等,如果你想从事后台数据库方面工作,则应学习SQL……
最好的编程语言?GO语言年度提升31名
而其中,Java语言似乎长盛不衰,连续多年获得TIOBE最受欢迎语言排行榜第一名。对于很多程序员而言,这似乎已经成为一个习惯,Java也顺理成章的成为很多编程人员学习的首选。但如今看来,这种定式正在发生着变化。
为什么这么说呢?
从2017年第一份榜单来看,JAVA虽然依然蝉联第一,但是GO语言、Dart和Perl却增长迅速,GO语言成为年度增长最快语言;下降最快的语言是PHP,从第六名下降到第十名。
这是2017年2月份TIOBE出的编程语言排名:

作为今年的Tiobe年度最受欢迎编程语言,Go与去年相比增长了2.16个百分点,占了2.325%的份额。2016年1月时,Go语言排在第54位,一年的时间上升了41位,本月已经上升至第13名。
TIOBE指数目前排名前五的分别是:去年的获胜者,Java(17.278%,较2016年1月下降4.19个百分点),C(9.349,下降6.69分),C++(6.301,下降.61分),C#(下降0.67点),Python(3.465,下降0.39点)。  
这个排行榜最有趣的地方恐怕就是排名前五位的编程语言都在下滑,这其中C语言的下滑尤为剧烈,自从C语言的第一之位被Java夺去之后,元气大伤。这与移动开发和web开发的兴起关系密切,C语言显然对这两个场景的开发有些水土不服。
为什么Go语言将超越Java?
虽然Java在编程语言领域仍占据主导地位,但是后起之秀,新型语言更适合现代的计算方式,尤其是在云平台中。Go——为云而生,由于其拥有并发性的操作系统以及完美的架构,使其越来越受到开发者的青睐。
Go语言的受欢迎度不断上升?Go语言的优势是什么?
背景
一个语言的背景决定了他的发展方向和潜力,这就像一个人的家庭环境一定会对他的发展有影响。
Java是从1990年的雏形到1995年的正式发行已经过去20多年,期间Java的东家从SUN公司辩称甲骨文公司,后来还成为甲骨文与谷歌之间逐力的砝码。
相较而言,Go语言的背景更为清晰可靠,它是Google开发的,同时它也比Java年轻十四年(2009年发布)
简约
俗话说“大道至简”,Go语言就是这样一个极为简洁的编程语言。不同于Java,Go语言内嵌了关联数组(也称为哈希表(hashes)或字典(dictionaries)),就像字符串类型一样。
GO语言最初的定位就是互联网时代的C语言,所以,它的基础哲学也来源于C语言,而C语言的成功正是因为它的简单。而简洁的表达方式也会提升程序员的开发效率。
并发性好
几年前,要实现并发编程并不是一件容易的事儿,要想完成并发编程要同时了解线程、锁、Semaphore、CPU缓存方式等等,而多核处理器的普及,让编程语言更为注重并发性,而Go语言,可以在一个进程中执行有数以十万计的协程,依旧保持高性能。
应用场景符合未来需求
有人猜测,今年10月GO语言增长率如此之高的原因之一是:Docker的普及。如果真是如此,那么GO语言将持续如此高的增长率。除此之外,GO语言适用于服务器编程、 分布式系统、网络编程、内存数据库和云平台,而这些领域正是IT技术未来发展的重要方向。

“我为什么选择使用Go语言?”
“Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持。”,苹果核心系统高级工程师、EGO会员、GopherChina组织者、《Go Web编程》作者谢孟军说。
当被问到自己为什么如此钟情于使用Go语言,谢孟军谈到了以下几个原因:
学习曲线
它包含了类C语法、GC内置和工程工具。这一点非常重要,因为Go语言容易学习,所以一个普通的大学生花一个星期就能写出来可以上手的、高性能的应用。在国内大家都追求快,这也是为什么国内Go流行的原因之一。
效率
Go拥有接近C的运行效率和接近PHP的开发效率,这就很有利的支撑了上面大家追求快速的需求。
出身名门、血统纯正
之所以说Go出身名门,是因为我们知道Go语言出自Google公司,这个公司在业界的知名度和实力自然不用多说。Google公司聚集了一批牛人,在各种编程语言称雄争霸的局面下推出新的编程语言,自然有它的战略考虑。而且从Go语言的发展态势来看,Google对它这个新的宠儿还是很看重的,Go自然有一个良好的发展前途。我们看看Go语言的主要创造者,血统纯正这点就可见端倪了。
自由高效:组合的思想、无侵入式的接口
Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持。Go语言支持当前所有的编程范式,包括过程式编程、面向对象编程以及函数式编程。程序员们可以各取所需、自由组合、想怎么玩就怎么玩。
强大的标准库
这包括互联网应用、系统编程和网络编程。Go里面的标准库基本上已经是非常稳定了,特别是我这里提到的三个,网络层、系统层的库非常实用。
部署方便:二进制文件、Copy部署
我相信这一点是很多人选择Go的最大理由,因为部署太方便了,所以现在也有很多人用Go开发运维程序。
简单的并发
它包含了降低心智的并发和简易的数据同步,我觉得这是Go最大的特色。之所以写正确的并发、容错和可扩展的程序如此之难,是因为我们用了错误的工具和错误的抽象,Go可以说这一块做的相当简单。
稳定性
Go拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性,稳定压倒一切。那么为什么Go相比于其他程序会更稳定呢?这是因为Go提供了软件生命周期(开发、测试、部署、维护等等)的各个环节的工具,如go tool、gofmt、go test。
这里引用知乎里一个同学对Go评论的话:最开始准备上线的时候其实心里挺忐忑,毕竟一旦出现故障,不仅黑锅得自己背,面子也上过不去啊。还好结果蛮漂亮,自上线后没出现过一次突发性BUG,降低运维难度的同时还减少了机器的负载。我相信这也是大多数人用了Go之后的感言。
那么目前Go还存在哪些缺点呢?以下是我自己在项目开发中遇到的一些问题:
Go的Import包不支持版本,有时候升级容易导致项目不可运行,所以需要自己控制相应的版本信息。比较好的现象是从Go 1.5开始Go对此就有重视了并支持Vendor。
Go的goroutine一旦启动后,不同的goroutine之间切换不是受程序控制,runtime调度的时候需要严谨的逻辑,不然goroutine休眠,过一段时间逻辑结束了却突然冒出来又执行了,这会导致逻辑出错等情况。这个目前无解,应该属于调度器的优化。
GC延迟有点大,我开发的日志系统伤过一次,同时在并发很大的情况下,处理很大的日志,GC没有那么快,内存回收不给力,后来经过Profile程序改进之后得到了改善。目前来看,GC已经优化的非常好了,给大家看一下Go1.5、Go1.6的GC前后对比图。

图3
图3是Go1.4升级到Go1.5之后的效果,从300ms到了50ms左右。

图4
图4是从Go1.5升级到Go1.6,从40ms到了2ms左右,可以说目前GC基本上不是Go的问题了。
pkg下面的图片处理库很多bug,还是使用成熟产品好,调用这些成熟库imagemagick的接口比较靠谱。总而言之,从工程的角度上来看,对于大多数后台应用场景,选择Golang是极为明智的选择。 这样可以很轻松的兼顾运行性能、开发效率及维护难度这三大让诸多程序猿欲仙欲死的点。
哪些领域在用Go语言?
“在美国市值前20的企业有超过一半正在使用Go”。不仅市值前20的企业,国外很多初创企业,都在使用Go语言。 近年来,Go语言在中国的关注,也异常火爆。几乎每一天,都听到许多人谈论到 Go语言。国外甚至有人,专门写了一篇文章,来分析为什么go在中国如此火:Why is Golang popular in China?: http://herman.asia/why-is-go-popular-in-china
目前,Go语言被广泛应用于各种领域。
软件开发工具
几乎所有这几年出现的 软件开发 工具都已经被用 Go语言 语言改写了。我觉得这恐怕预示着什么。通常,相对于一般的开发小组,小公司的运维小组收到的监管很少。只要是能工作的工具,他们一般就会去用,而不需要获 得谁的批准。对他们来说 Go语言 语言工作的非常棒,这是一门静态类型和编译型的语言(无需安装需要上千个依赖的运行库),而且 Go语言 的运行库也不大,也不用动不动就需要 100-300M的磁盘空间(看看 ruby、jvm 吧)。
比特币
许多 DeferPanic 上的用户都与比特币/虚拟货币有关。这并非巧合,整个生态系统的共同点是使用Go语言。
不管你听到过什么,比特币都还没有死掉。很多用例传统上没想到过的,但是实际上已经有了很大的成功。我们的这些用户需要有高性能和更好的数据安全性的保证,Go语言在这方面显然是很好的选择。
容器技术
有趣的是和那些科技人士交谈后发现他们居然不知道今天所有容器技术都是 Go语言 写的,不是 99%,也不是 95%-100%。
所有今天在使用的容器软件都是 Go语言 写的。
市场营销人员应该开始用 Go语言 原生来替换云原生。
我们可以强调这是有多大(的市场)?即使你不相信容器的炒作,认为这是一个庞式骗局。当你考虑到所有公司使用 Go语言 的人数,并且未来几年大公司使用 Go语言 人数巨大。问你从世界财富五百强的首席信息官那听说他们将要检修他们系统,你不得不意识到这订单很大。这不是他们看轻这件事,相反,他们也不会轻易的从中 走开,因为这是一个巨大的对时间,金钱以及过程的投资。
微服务
微服务在过去的几年风靡一时,不少分析师忽略了它们的价值,因为他们并不是搞技术的。当你用maven下载了半个互联网,同时启动要占用 800M 虚拟内存,或者当你运行一个 RoR 的应用的时候占用了 200M,这和 Go语言 平均 5-20M 的运行时想比真是相差巨大。这种差距可以立刻转换到账单上,当你公司每个月少给 25-30 美金在 AWS 上就显而易见了。随着这种激烈的趋势下去,我们会看到越来越多的公司因为上述理由采用这种模式,并且你可以打赌即将迎来 Go语言 的时代。
商业应用
当谈及到一些知道 Docker 的人很有趣,他们甚至会去投资它在他们并不知道这个是由一个他们从未听过的 Go语言 编写而成的之前。
从来自 Battery 的 Adrian (也是来自 Netflix)今年在他与公司的交流中曾经数次说到 Go语言:
“大概四分之三的新东西是用 Go语言 写的 @golang” – 十二月十四号
L 接着他又提到 “几乎所有新的、有趣的东西都是用 Go语言 写的”.
在他的行业里面他可能有更好的眼光,因为他参加过很多会议,并如此的接地气。来自 Mayfield 的 Robin Vasan 甚至在今年的 goper 大会上进行了一次演讲在 VC 工作,并且精通 Go语言 的 Jerry Chen 曾经出席大会并有良好表现。
今年2月,Go 团队发布了 Go 1.8 ,编译时间比 Go 1.7 提高了约 15%。
技术发展进行时,技术大会怎么能落下?

收藏
3回复
hujunyuan80581楼•2017-11-28

回复栏需要添加表情

shen1002楼•2017-11-28

😀好提议

4965436793楼•2017-11-28

好文章。