Technical · Interview · Career
最近TIOBE Index发布了最热门的编程语言,Go是Top10编程语言中唯一一个排名在显著上升的语言,其他语言如Java(继续稳坐第一名),C/C++都出现了不同程度的下滑。
那么这个Google精心打造的下一代高性能编程语言Go,到底有什么过人之处呢?
Google出品
2009年Google正式发布了Go这一下一代后端编程语言,希望能够帮助Web开发人员能够以Google的规模和速度来开发应用,并且专注于高性能和易用性的均衡。自从出道以来,即使在Google没有做任何强制捆绑的情况下(大家可以对比苹果对Swift的支持),Go凭借自己的技术特性,受到了程序员和公司的各种欢迎,每年在TIOBE的排名都在不断的上升。2017年更是把很多语言都拖下马来,挺进前十最受欢迎的语言。
机器友好
用一句话来说,Go是在对机器友好和对程序员友好之间平衡的比较好的一种新型语言。首先什么是对机器友好呢?就是编译器写出来的二进制代码足够快速有效。
在这方面来说C/C++无疑是比较好的,甚至很多操作系统都是用C/C++编写的。Java则因为其虚拟机和跨平台支持的原因,在运行速度上要稍逊一筹。Go没有使用虚拟机,所以其机器代码会比Java好一些,比较接近C/C++。
这个指标对很多追求性能的公司来说很重要,比如Dropbox就用Go来开发自己的Memcached系统(称之为HAT),这种缓存系统要求就是反应极快,因为直接影响了用户的操作延迟。
程序员友好
那么什么是对程序员友好呢?最简单的一个指标就是实现同样一个功能所需要的代码长度。Go的语言在设计的时候参考了Python等解释性语言的优点,所以很多方面是优于Java而且远胜于C/C++的。举个简单的例子来说,在Java里边每一个Web Service收到前端的JSON都需要转成Java内部的Object(或者叫做Model)。在Java里边很可能有多少个field就有多少行Set函数,以至于甚至要单独写一个class来存储这些转换的代码。而Go里边只需要一个decode函数就可以直接转换,大大减少了代码长度也规避了很多可能出现的错误。其他比如多线程,channel等的理念也都是Java里边写起来要很费事的,但是Go作为设计之初就是专门为Web Service提供开发的,相应的功能都提供了很简洁的接口。Java则在设计之初(上世纪90年代)为了满足其通用性,有很多非常累赘的设计。
Bug还没有找到!
接下来我们对比一下Python这种解释性语言和Go。
很多读者可能用Python写过机器学习相关的代码,感觉很熟手。这的确也是Python在工业界的一个最大的应用,写起来很多算法都可以套用别人的代码。但是Python是明显不适合作为工业界的web service来使用的,因为Python是一个解释性语言,也就是只有解释到了某一行代码的时候解释器才会去看代码是否写错了,而不是像Java/Go/C/C++这些编译型语言在编译早期就排查了很多Bugs。在production上面这个是致命的,因为这会埋下很多定时炸弹,只要提交代码那个时候没有问题,服务器也检查不出来。等到将来这个炸弹被触发的时候,往往都是一些莫名其妙的难以理解的Bug。无数程序员哭晕在厕所的故事我就不举例了。基于这些,并没有哪一个主流大公司会用python搭建自己的主要的后端平台。
Go的未来
大家可能也会留意到现在除了Google以外,Go在各个startup(如Dropbox,Pinterest,SpaceX)和一些老牌的公司(如Facebook,eBay)都受到了很大的欢迎。国内的IT公司更是用的很多,比如京东用Go打造自己的消息推送系统,美团和新浪微博也都用Go开发自己的后台流量支撑系统等等。因为Go是一门全新的语言,所以开发人员要重新学习这门语言并且迁移服务需要一段时间。
如果你想了解Go以及其在Google Cloud当中的应用,欢迎报名参加来Offer的项目实战班,资深工程师手把手教会你如何开发下一代的互联网应用。