阅读更多

4顶
2踩

互联网

转载新闻 为什么说2017年你必须要学习Go了

2017-01-18 10:38 by 副主编 jihong10102006 评论(0) 有8312人浏览
引用
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设备)以提升最终用户体验。
  • 大小: 247.3 KB
  • 大小: 73.2 KB
  • 大小: 79.2 KB
  • 大小: 19 KB
  • 大小: 17.9 KB
  • 大小: 63.6 KB
来自: Go中国
4
2
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 2017年Go语言入门教程

    Go语言入门教程,只要你懂中文都可以看的懂本套教程,为任何想学习Go语言研制的教程。

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

    为什么要学习Go ... 因此,我开始学习了一段时间Golang,在这里我将告诉你为什么你也应该学习这种新语言。 在本文里我不会告诉你怎么写hello world。 我要分析计算机硬件软件的当前阶段,以解释为什...

  • [GO语言基础] 一.为什么我要学习Golang以及GO语言入门普及

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本。因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识;另一方面是分享与读者,希望大家一起进步。这系列文章入门部分将参考“尚硅谷...

  • 2017年你应该学习的编程语言、框架和工具

    2017年你应该学习的编程语言、框架和工具 2016 年在开发者圈子中许多新的技术和概念层出不穷,人工智能、机器学习、Progressive Web Apps 等等,各种语言、框架和工具的更新也是让人看得眼花缭乱。2017 年,...

  • 为什么要学习Go语言

    因此,我开始学习了一段时间Golang,在这里我将告诉你为什么你也应该学习这种新语言。 在本文里我不会告诉你怎么写hello world。 我要分析计算机硬件软件的当前阶段,以解释为什么我们需要像Go这样的新语言? 硬件...

  • 编程语言排行榜2017_2017年要学习的5种新编程语言

    无论您是刚刚开始还是经验丰富的程序员,您最常问的问题可能是接下来要学习什么? 网络行业瞬息万变 ,您总是会发现一些新知识并有经验。但是,问题仍然在于如何选择下一种语言? 另请阅读: 学习编程:10个...

  • 2017年前端工程师应该学习什么

    翻译原文:2017年前端工程师应该学习什么 英文原文:2017 is the year that front-end developers should go back and master the basics 转载请注明出处,保留原文链接以及作者信息 在我们所生活的这个快节奏的...

  • 2017 年你应该学习的编程语言、框架和工具

    2016 年在开发者圈子中许多新的技术和概念层出不穷,人工智能、机器学习、Progressive Web Apps 等等,各种语言、框架和工具的更新也是让人看得眼花缭乱。2017 年,作为开发者应该跟随潮流还是理性选择新技术? ...

  • 2017 年你应该学习的编程语言、框架和工具(转)

    摘要: 2016 年在开发者圈子中许多新的技术和概念层出不穷,人工智能、机器学习、Progressive Web Apps 等等,各种语言、框架和工具的更新也是让人看得眼花缭乱。2017 年,作为开发者应该跟随潮流还是理性选择新技术...

  • Golang学习+深入(一)

    Go语言(简写:Golang)为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合。API:Application Programming Interface:应用程序编程接口。

  • Go语言为什么值得学习?

    下面通过介绍我的亲身经历来介绍我为什么说 Go语言值得学习 我的经历 我是2015年夏天入行编程,使用Java语言做Android开发。15年正是创业热潮,那时候中关村创业大街如火如荼,那时候还没有小程序,出去玩就是地推...

  • GO笔记之为什么要学习GO

    新学一门语言,大家都想先弄清楚为什么要学它?玩知乎一段时间更是让我感受深刻,诸如 为什么要学习Python? 为什么要学习C? 为什么要学习Java? 之类问题经常出现在眼前。以前学语言时倒没怎么关心过这类问题。...

  • Go语言的2017年终总结

    写在前面\\Google 的 Go 语言团队会在 2018 年初宣布 Go 1.10 正式版的发布。10 这个二位数也预示着 Go 语言的进一步成熟。据说,Go 2 也被提上了日程。Go 2 将会是大神们对 Go 语言的一次彻底反思和改进。虽然现在...

  • Go 语言学习总结(8)—— Go 自学者必学的教程大纲

    Go语言是目前最受欢迎的语言之一,它具有入门快、程序库多、运行迅速等特点,很适合快速构建互联网软件产品,所以互联网大厂开始纷纷拥抱Go语言。根据《2021 年腾讯研发大数据报告》中显示,随着腾讯云计算和大数据...

  • springboot(酒店管理系统)

    开发语言:Java JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.6/5.7(或8.0) 数据库工具:Navicat 开发软件:idea 依赖管理包:Maven 代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~ 如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、界面、功能等等... 声明: 1.项目已经调试过,完美运行 2.需要远程帮忙部署项目,需要额外付费 3.本项目有演示视频,如果需要观看,请联系我 4.调试过程中可帮忙安装IDEA,eclipse,MySQL,JDK,Tomcat等软件 重点: 需要其他Java源码联系我,更多源码任你选,你想要的源码我都有! 需要加v19306446185

  • BP神经网络matlab实例.doc

    数学模型算法

  • 设计.zip

    设计.zip

  • 基于 Spring Cloud 组件构建的分布式服务架构

    Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + MyBatis)开发的Web应用程序。SSM是一种常用的Java开发框架组合,它结合了Spring框架、Spring MVC框架和MyBatis框架的优点,能够快速构建可靠、高效的企业级应用。 1. Spring框架:Spring是一个轻量级的Java开发框架,提供了丰富的功能和模块,用于开发企业级应用。它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的Web框架,用于开发Web应用程序。它采用MVC(Model-View-Controller,模型-视图-控制器)的架构模式,将应用程序分为模型层、视图层和控制器层,提供了处理请求、渲染视图和管理流程的功能。 3. MyBatis框架:MyBatis是一个持久层框架,用于与数据库进行交互。它提供了一种将数据库操作与Java对象映射起来的方式,避免了手动编写繁琐的SQL语句,并提供了事务管理和缓存等功能,简化了数据库访问的过程

  • 【微信小程序毕业设计】书店系统开发项目(源码+演示视频+说明).rar

    【微信小程序毕业设计】书店系统开发项目(源码+演示视频+说明).rar 【项目技术】 微信小程序开发工具+java后端+mysql 【演示视频-编号:246】 https://pan.quark.cn/s/cb634e7c02b5 【实现功能】 用户信息管理,图书信息管理,图书类型管理,图书留言管理,论坛信息管理等

Global site tag (gtag.js) - Google Analytics