为什么你必须在2017年学习Go在过去几年中,Golang越来越受欢迎。什么能让编码员像一种新语言一样疯狂?所以,我开始学习Golang一段时间,在这里我会告诉你为什么你也应该学习这门新语言。在本文中,我不会告诉您如何编写helloworld。我要分析一下计算机硬件软件的现阶段,来解释为什么我们需要像Go这样的新语言?硬件限制摩尔定律正在失效英特尔于2004年推出了第一款时钟速度为3.0GHz的奔腾4处理器。今天,我的MackbookPro2016的CPU时钟速度为2.9GHz。可以看出,近十年来,CPU的处理能力并没有太大的提升。您可以在下表中看到这一点。从上图可以看出,单线程性能和处理器频率在过去十年中保持平稳。如果您认为添加更多晶体管是解决方案,那您就错了。这是因为在较小的尺度上,一些量子特性开始出现(比如隧道效应,因为它实际上使用了越来越多的晶体管(为什么?)并且添加晶体管的成本/性能正在下降。添加越来越多的核心。现在我们有四-核心和八核CPU可用。同时我们也引入了超线程。也给处理器增加了更多的缓存来提高性能。但是上面的解决方案也有它们的局限性。我们不能给处理器增加更多的缓存来提高性能。性能,因为缓存有物理限制:缓存越大,缓存越慢。向处理器添加更多内核也有成本。而且,这些都不是最佳扩展。这些多核处理器可以同时运行多个线程,并且把并发写在纸上。这个我们稍后再讨论。所以,如果我们不能仅仅依靠硬件的改进来提高性能,更高效的软件也是我们需要考虑的手段。但是不幸的是不幸的是,现代编程语言效率不高。Go有协程!!如上所述,硬件制造商正在向处理器中添加越来越多的内核以提高性能。所有使用这些处理器的数据中心,其核心数量将在未来几年显着增加。更重要的是,今天的应用程序使用多个微服务来维护数据库连接、消息队列和缓存。因此,我们开发的软件和编程语言应该很容易支持并发,并且随着内核数量的增加它们应该很容易扩展。然而,大多数现代编程语言像Java、Python等都是在90年代在单线程环境下发明的。当然,这并不是说他们不支持多线程(译者的话Python不支持多线程)。大多数编程语言都支持多线程。真正的问题来自并发执行和线程锁、竞争条件和死锁。这些事情使得在这些语言上创建多线程应用程序变得困难。例如,在Java中创建一个新线程会消耗大约1MB的内存堆大小。最终如果你创建了数千个线程,这将对堆内存造成巨大压力,并会因内存不足而被操作系统杀死。另外,如果你想在两个或多个线程之间进行通信,那就更难了。另一方面,2009年Go发布时,多核处理器已经普及。这也是GoLang将并发作为首要任务的原因。Go使用goroutines而不是线程。新的goroutines只使用将近2KB的内存,你可以创建数百万个goroutines。当然还有其他好处:拥有一个可以增长的段堆。这意味着它们只在需要时使用更多内存。Goroutines的启动时间比线程快。Goroutines带有内置原语,可以在它们(通道)之间安全地通信。Goroutines允许你在共享数据结构时避免互斥。此外,goroutines和OS线程不是1:1映射的。单个goroutine可以在多个线程上运行。Goroutines被多路复用到少量的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的设计者在创建语言时考虑到了这一点。由于谷歌有一个非常大的代码库,成千上万的开发人员在同一个代码库上工作,代码应该很容易被其他开发人员理解。这将使代码易于维护和修改。Go有意去除了许多现代OOP语言所具有的特性。没有课程。Go只有结构,没有类。不支持继承。这将使代码易于修改。在Java/Python等其他语言中,如果ABC类继承了XYZ类,在XYZ类中做了一些改动,那么这可能会对其他继承XYZ的类产生一些副作用。通过去除继承,Go使得代码更容易理解(因为没有超类)。没有构造函数。没有注释。没有仿制药。没有什么不寻常的。上述差异使得Go与其他语言有很大不同。当然,你可能不喜欢上面的一些观点。但是,如果没有上面的功能,你只需要多写2-3行代码就可以了。但是,这将使您的代码更加简洁易懂。上图显示Go几乎与C/C++一样高效,同时保持代码语法简单,如Ruby、Python。这是人类和机器的双赢局面!与其他新语言(如Swift)不同,Go的语法非常稳定。自2012年***公开发布1.0版本以来,它一直保持不变。这使其向后兼容。Go背后是谷歌,虽然这不是直接的技术优势。但是Go是由谷歌设计和支持的。谷歌拥有世界上最好的云基础设施之一,而且规模庞大。Go由Google设计,旨在解决他们需要的可扩展性问题。这些也是您在创建自己的服务时将面临的问题。Go也被一些大公司使用,如Adob??e、BBC、IBM、英特尔等。结论尽管Go与其他OO语言有很大不同,但它同时为您提供高性能(如C/C++)、超级简单的并发处理(如Java)和干净的代码(如Python/Perl)。如果你没有任何学习Go的计划,我仍然会说软件开发人员需要编写超高效的代码。开发人员需要了解硬件并相应地优化程序。优化软件以在更便宜和更慢的硬件(例如物联网设备)上运行,以改善最终用户体验。相关链接Go详细介绍:点击查看Go下载地址:点击下载
