为什么说 2017 年你必须要学习 Go 了

为什么要学习Go

Go是未来的服务端语言— Tobias Lütke, Shopify。在过去的几年中,Golang逐步流行起来。 还有什么能比一门新语言让码农们疯狂呢? 因此,我开始学习了一段时间Golang,在这里我将告诉你为什么你也应该学习这种新语言。 在本文里我不会告诉你怎么写hello world。 我要分析计算机硬件软件的当前阶段,以解释为什么我们需要像Go这样的新语言?

硬件限制

摩尔定律正在失效 第一个具有3.0GHz时钟速度的Pentium 4处理器是由英特尔于2004年推出的。 而今天,我的Mackbook Pro 2016的CPU时钟速度为2.9GHz。 可以看到在过去的十年中,CPU处理能力没有太大的进步。 您可以在下面的图表中看到这一点。

从上面的图表可以看出,单线程的性能和处理器的频率在过去的十年内保持平稳。如果你认为添加更多的晶体管是解决方案,那么你错了。这是因为在较小的尺度上一些量子性质开始出现(如隧道,因为它实际上用掉更多的更多的晶体管(为什么?)并且添加晶体管的性价比在下降。 所以制造商开始向处理器添加越来越多的核心。现在我们有四核和八核CPU可用。 同时我们还引入了超线程。还向处理器添加更多缓存以提高性能。 但上述解决方案也有其局限性。我们不能向处理器添加更多的缓存以提高性能,因为缓存具有物理限制:缓存越大,缓存越慢。向处理器添加更多核心也具有成本。此外,这都不能无限扩展。这些多核处理器可以同时运行多个线程,并在纸面上带来并发性。我们稍后将讨论这一问题。 所以,如果我们不能完全依靠硬件的改进来提升性能,更高效的软件也是我们需要考虑的手段。但遗憾的是,现代编程语言并不高效。

Go has goroutines!!

如上所述,硬件制造商正在向处理器添加越来越多的核心以提高性能。使用这些处理器的所有数据中心,在未来几年内核数量将会大大增加。更重要的是,今天的应用程序使用多个微服务来维护数据库连接,消息队列和缓存。因此,我们开发的软件和编程语言应该轻松支持并发性,并且它们应该随着核心数量的增加而轻松扩展。 但是,大多数现代编程语言(如Java,Python等)发明于90年代的单线程环境。当然这并不意味着他们不支持多线程(译者的话Python确实不支持多线程)。大多数编程语言支持多线程。真正的问题来自并发执行和线程锁,竞争条件和死锁。这些东西使得在这些语言上创建多线程应用程序很困难。 例如,在Java中创建新线程会消耗大约1MB的内存堆大小。最终如果你创建了数千个线程,这将对堆内存造成巨大的压力,并将由于内存不足而被操作系统杀死。此外,如果你想在两个或多个线程之间进行通信,也比较困难。 另一方面,Go在2009年发布时,多核处理器已经流行起来。这就是为什么GoLang以并发为第一要务。 Go使用goroutines而不是线程。新建goroutine只使用近2KB的内存,你可以创建数百万goroutine。

当然还有其他的好处:

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

Goroutines的启动时间比线程快。

Goroutines带有内置的原语,以便在它们之间(channel)安全地通信。

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

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

以上几点,使Go非常强大,可以在处理并发(如Java、C和C++)的同时保持代码的优雅(像Earlang)。

Go直接运行在硬件上

使用C、C ++的一个最大的好处是它们的性能比其他现代高级语言(如Java / Python)更强。 因为C / C ++是编译执行而不是解释执行的。 当您使用Java或其他基于JVM的语言构建应用程序时,它将代码编译为字节码,在执行时,JVM解释字节码并将其转换为处理器可以理解的二进制代码。

而C、C 不在VM上执行,从执行周期中删除一个步骤,并提高了性能。 他们直接将代码编译成二进制代码。

但是在C/C中释放和分配内存太过痛苦。 即使大多数编程语言可以使用垃圾收集器或引用计数算法处理对象分配和删除。 Go同时拥有上面提到的好处。 Go是像C/C++这样的低级语言并且是编译型语言。 这意味着它的性能几乎更接近低级语言。 并且Go还使用垃圾回收来分配和释放内存。 所以不需要malloc和free!!!

Go代码容易维护

Go有着非常整洁和干净的语法。Go的设计者在创建语言时考虑到了这一点。 由于google有非常大的代码库,成千上万的开发人员正在使用同一个代码库,代码应该易于其他开发人员理解。这将使代码易于维护和修改。 Go故意去掉了很多现代OOP语言具有的功能。

没有类。 Go只有结构体而不是类。

不支持继承。 这将使代码容易修改。 在其他语言(如Java / Python)中,如果ABC类继承了类XYZ,并且在类XYZ中进行了一些更改,那么这可能会在继承XYZ的其他类中产生一些副作用。 通过删除继承,Go使得很容易理解代码(因为没有超类)。

没有构造函数。

无注解(annotation)。

没有泛型(generics)。

没有异常。

以上的差异使Go与其他语言非常不同。 当然你可能不喜欢上面的一些点。 但是,在没有上述功能的情况下 你需要做的仅仅是多写2-3行代码。 然而这样会使你的代码更加简洁易懂。

上图显示Go几乎与C/C++一样高效,同时保持代码语法简单,如同Ruby,Python。 这是一个对人类和机器来说双赢的局面! 与其他新语言(像Swift)不同,Go的语法非常稳定。 自从2012年首次公开发布1.0版以来,它保持不变。这使得它向下兼容。

Go的背后是Google

虽然这不是直接的技术优势。 但Go是由Google设计和支持的。 Google拥有世界上最大的云基础架构之一,并且可以大规模扩展。Go是由Google设计的,以解决他们需要的可扩展性性问题。这些也是你在创建自己的服务时将面临的问题。

Go也被一些大公司使用,如Adobe,BBC,IBM,英特尔等等。

结论

即使Go和其他面向对象的语言非常不同,但它同时为您提供高性能(如C/C++),超级好用的并发处理(如Java)和简洁的代码(如Python/Perl)。

如果你没有任何计划学习Go,我还是会说软件开发人员需要写出超高效的代码。开发人员需要了解硬件并相应地优化程序。优化软件以运行在更便宜和更慢的硬件(如IOT设备)以提升最终用户体验。

文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-12-09 00:24:27

为什么说 2017 年你必须要学习 Go 了的相关文章

为什么说2017年你必须要学习Go了

为什么要学习Go Go是未来的服务端语言- Tobias Lütke, Shopify.在过去的几年中,Golang逐步流行起来. 还有什么能比一门新语言让码农们疯狂呢? 因此,我开始学习了一段时间Golang,在这里我将告诉你为什么你也应该学习这种新语言. 在本文里我不会告诉你怎么写hello world. 我要分析计算机硬件软件的当前阶段,以解释为什么我们需要像Go这样的新语言? 硬件限制 摩尔定律正在失效 第一个具有3.0GHz时钟速度的Pentium 4处理器是由英特尔于2004年推出的

观点 | 2017年前端初学者的生存指南

逝者如斯夫,不舍昼夜. 历史在向前发展,前端的"摩尔定律"是每隔18个月难度会上升一次,过去的2016年我们不再回顾,展望2017年,对于初学者想要生存下来,该怎么办?如果你有这个疑问,那么你就得好好阅读一下,我这篇文章了. 数据不准,2017年2月19日搜索,来自拉勾网(吐槽:万年不匹配)和智联招聘. PS:(请原谅我截图了一Angularjs的JD) 看起来行业需求的重点都在各种框架的使用上,其实不然.做为初学者,一定要对前端行业有足够的信心与耐心,你才可能走下去.前端是一个承上启

2016—2017前端体系知识图谱

2017年很快又过去了几个月,在过去的一年里,前端技术迅猛发展,前端各类技术都在优化升级,"大前端"的概念进一步体现,前端人才需求量进一步扩大,但优秀的前端工程师却如大海捞针,一将难求,那么在未来一年里我们应该做好怎样的准备才能成为一名优秀(不仅仅是合格)的前端工程师呢?  一.现代前端技术知识体系)一 .现代前端技术知识体系  我们先看看2017-2018前端技术知识体系图,这也是现代前端技术体系结构图的第二版.  [查看code部分下载大图]  大家也可以对比2016年的知识技术体

体系结构顶会 ASPLOS 2017 最佳论文出炉,阿里云周靖人主旨演讲

2017年4月11日晚,在西安举行的架构体系的顶级会议ASPLOS(面向编程语言和操作系统的架构支持会议,Architectural Support for Programming Languages and Operating Systems)公布了最佳论文.最有影响力论文和 Test of Time 几项大奖. ASPLOS(编程语言和操作系统的体系结构支持会议)是ACM开办的一个以体系结构为核心内容的多学科会议,其研究领域跨越硬件.体系结构.编译器.编程语言.操作系统.网络和应用,尤其关注

2017年云计算和数据中心的5大趋势

本文讲的是2017年云计算和数据中心的5大趋势在2017年,云计算的投资将持续火爆,但是随着企业需求变化, 2017年云市场将出现如下五大趋势. 多重云将成为新常态 随着许多公司投资公有云和私有云服务,2017年将会有更多的企业同时向多个云提供商承诺."例如:将有越来越少的企业则亚马逊网络服务作为唯一业务;而是使用双源公有云服务来避免供应商锁定.这样的好处是使数据服务更加高效.没有这个功能,企业部署将会像使用磁带时一样低效. 内存和临时存储变得更加重要 增强和虚拟现实,人工智能和机器学习已经变得

从游戏语音到视频社交,一文详解2017实时互联网最热技术

2017 已过大半,从年初盛起的<王者荣耀>.<狼人杀>却依然是最火爆的游戏产品,其共同特性都在于集成了实时语音功能,前者左手走位右手技能,语音自然也就成为了非常必要的属性,而后者更不用说,本就是纯粹依靠实时语音进行下去的游戏. 而从游戏到直播.在线教育/医疗以及 VR/AR.AI 等互联网垂直行业及创新技术,这样的例子还有很多.比如转型做直播的陌陌在最新的 8.0 版本中推出了"快聊"."狼人杀"."派对"等实时视频社交

预测2017年云计算市场将出现五大趋势

在2017年,云计算的投资将持续火爆,但是随着企业需求变化, 2017年云市场或许将出现如下五大趋势. 多重云将成为新常态 随着许多公司投资公有云和私有云服务,2017年将会有更多的企业同时向多个云提供商承诺.例如,将有越来越少的企业将亚马逊网络服务作为唯一业务,而是使用双源公有云服务来避免供应商锁定.这样的好处是使数据服务更加高效.没有这个功能,企业部署将会像使用磁带时一样低效. 内存和临时存储变得更加重要 增强和虚拟现实,人工智能和机器学习已经变得越来越流行.分析这些新的数据源对长期业务目标

2017年云计算和数据中心五大趋势

编者按:云计算在近几年获得了很大的发展,国内市场上,先行的阿里云渐渐找到营收模式,紧跟而来的其他厂商也在推动行业发展.在即将到来的2017年,相信市场竞争会更加激烈,会出现哪些趋势呢? 本文给出了2017年云计算发展的五个趋势. 在2017年,云计算的投资将持续火爆,但是随着企业需求变化, 2017年云市场将出现如下五大趋势. 多重云将成为新常态 随着许多公司投资公有云和私有云服务,2017年将会有更多的企业同时向多个云提供商承诺.例如,将有越来越少的企业将亚马逊网络服务作为唯一业务,而是使用双

李彦宏、马化腾、沈向洋三巨头对话人工智能的应用和未来 | 2017 IT领袖峰会

雷锋网消息,4月2日,2017中国(深圳)IT领袖峰会正式开幕,腾讯董事会主席兼首席执行官马化腾.百度创始人.董事长兼首席执行官李彦宏.微软全球执行副总裁沈向洋围绕"人工智能"的主题进行了高端对话. 马化腾由"绝艺"谈到腾讯对于人工智能的理解,他用了"恐怖"这个词汇来描述对于AI强大的自我学习能力的感受.李彦宏谈及了百度在非常早的时期布局人工智能的缘由,他还认为,人工智能并不是互联网的一部分,而是颠覆性的技术革命.沈向洋博士谈到现阶段微软在人工智