Go 简介、应用场景

一. go语言的优势

1.并发性能好

基于goroutine(协程) 的并发,可以将 goroutine 理解为一种虚拟线程。Go 语言运行时会参与调度 goroutine,并将 goroutine 合理地分配到每个 CPU 中,最大限度地使用CPU性能。开启一个goroutine的消耗非常小(大约2KB的内存),你可以轻松创建数百万个goroutinegoroutine的特点:

  1. goroutine具有可增长的分段堆栈。这意味着它们只在需要时才会使用更多内存。
  2. goroutine的启动时间比线程快。
  3. goroutine原生支持利用channel安全地进行通信。
  4. goroutine共享数据结构时无需使用互斥锁。

2.性能强悍

处理器只能理解二进制文件,Java和Python这种高级语言在运行的时候需要先将人类可读的代码翻译成字节码,然后由专门的解释器再转变成处理器可以理解的二进制文件。go是编译型的语言,它直接将人类可读的代码编译成了处理器可以直接运行的二进制文件,执行效率更高,性能更好。

3. 语法简洁

4.代码风格统一

Go 语言提供了一套格式化工具——go fmt。一些 Go 语言的开发环境或者编辑器在保存时,都会使用格式化工具进行修改代码的格式化,这样就保证了不同开发者提交的代码都是统一的格式。

5.开发效率高

二. go语言的历史

2007年9月,Rob Pike在Google分布式编译平台上进行C++编译,在漫长的等待过程中,他和Robert Griesemer探讨了程序设计语言的一些关键性问题,他们认为,简化编程语言相比于在臃肿的语言上不断增加新特性,会是更大的进步。随后他们在编译结束之前说服了身边的Ken Thompson,觉得有必要为此做一些事情。几天后,他们发起了一个叫Golang的项目,将它作为自由时间的实验项目。

2008年5月 Google发现了GO语言的巨大潜力,得到了Google的全力支持,这些人开始全职投入GO语言的设计和开发。

2009年11月 GO语言第一个版本发布。2012年3月 第一个正式版本Go1.0发布。

2015年8月 go1.5发布,这个版本被认为是历史性的。完全移除C语言部分,使用GO编译GO,少量代码使用汇编实现。另外,他们请来了内存管理方面的权威专家Rick Hudson,对GC进行了重新设计,支持并发GC,解决了一直以来广为诟病的GC时延(STW)问题。并且在此后的版本中,又对GC做了更进一步的优化。到go1.8时,相同业务场景下的GC时延已经可以从go1.1的数秒,控制在1ms以内。GC问题的解决,可以说GO语言在服务端开发方面,几乎抹平了所有的弱点。

在GO语言的版本迭代过程中,语言特性基本上没有太大的变化,基本上维持在GO1.1的基准上,并且官方承诺,新版本对老版本下开发的代码完全兼容。事实上,GO开发团队在新增语言特性上显得非常谨慎,而在稳定性、编译速度、执行效率以及GC性能等方面进行了持续不断的优化。

三.go语言目前的应用

  • nsq:bitly开源的消息队列系统,性能非常高,目前他们每天处理数十亿条的消息
  • docker:基于lxc的一个虚拟打包工具,能够实现PAAS平台的组建。
  • k8s: 当下最流行的容器管理工具k8s也是基于go实现
  • packer:用来生成不同平台的镜像文件,例如VM、vbox、AWS等,作者是vagrant的作者
  • skynet:分布式调度框架
  • Doozer:分布式同步工具,类似ZooKeeper
  • Heka:mazila开源的日志处理系统
  • cbfs:couchbase开源的分布式文件系统
  • tsuru:开源的PAAS平台,和SAE实现的功能一模一样
  • groupcache:memcahe作者写的用于Google下载系统的缓存系统
  • god:类似redis的缓存系统,但是支持分布式和扩展性
  • gor:网络流量抓包和重放工具

四.Go适合用来做什么

  • 服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。
  • 分布式系统,数据库代理器等
  • 网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用、
  • 内存数据库,前一段时间google开发的groupcache,couchbase的部分组建
  • 云平台,目前国外很多云平台在采用Go开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的apcera云平台

Go 简介、应用场景相关推荐

  1. 【设计模式】建造者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.建造者模式简介 二.建造者模式适用场景 三.建造者模式优缺点 四.建造者模式与工厂模式 五.建造者模式代码示例 1.学生类 2.建造者抽象类 3.建造者实现类 4.教师类 ( 非必须 ) ...

  2. 【设计模式】抽象工厂模式 ( 简介 | 适用场景 | 优缺点 | 产品等级结构和产品族 | 代码示例 )

    文章目录 一.抽象工厂模式简介 二.抽象工厂模式适用场景 三.抽象工厂模式优缺点 四.产品等级结构和产品族 五.抽象工厂模式代码示例 1.冰箱抽象类 2.美的冰箱实现类 3.格力冰箱实现类 4.空调抽 ...

  3. 【设计模式】组合模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.组合模式简介 二.组合模式适用场景 三.组合模式优缺点 四.组合模式和访问者模式 五.组合模式代码示例 1.书籍和目录的抽象父类 2.书籍类 3.目录类 4.测试类 一.组合模式简介 组 ...

  4. 【设计模式】模板方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.模板方法模式简介 二.模板方法模式适用场景 三.模板方法模式优缺点 四.模板方法扩展 五.模板方法模式相关设计模式 六.模板方法模式代码示例 1.模板方法抽象类 2.模板方法实现类 1 ...

  5. 【设计模式】迭代器模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.迭代器模式简介 二.迭代器模式适用场景 三.迭代器模式优缺点 四.迭代器模式和访问者模式 五.迭代器模式代码示例 1.迭代器接口 2.迭代器实现 3.集合元素实例类 4.集合管理接口 5 ...

  6. 【设计模式】策略模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.策略模式简介 二.策略模式适用场景 三.策略模式优缺点 四.策略模式与其它设计模式 五.策略模式代码示例 1.促销策略接口 2.满减促销策略 3.返现促销策略 4.空促销策略 5.促销策 ...

  7. 【设计模式】观察者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.观察者模式简介 二.观察者模式适用场景 三.观察者模式优缺点 四.观察者模式代码示例 1.被观察者 2.观察者 3.通知类 4.测试类 五.JDK 中的观察者模式支持类 1.Observ ...

  8. 【设计模式】备忘录模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.备忘录模式简介 二.备忘录模式 适用场景 三.备忘录模式 优缺点 四.备忘录模式 与 状态模式 五.备忘录模式 代码示例 1.文档类 2.文档备忘录类 3.文档备忘录管理类 4.测试类 ...

  9. 【设计模式】命令模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.命令模式简介 二.命令模式 适用场景 三.命令模式 优缺点 四.命令模式 与 备忘录模式 五.命令模式 代码示例 1.命令接口 2.发布命令类 3.关闭命令类 4.游戏类 5.命令执行者 ...

  10. 【设计模式】中介者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.中介者模式简介 二.中介者模式适用场景 三.中介者模式优缺点 四.中介者模式 与 观察者模式 五.中介者模式 代码示例 1.聊天室 2.用户 3.运行实例 一.中介者模式简介 中介者模式 ...

最新文章

  1. Paper2:Fast 3D Line Segment Detection From Unorganized Point Cloud
  2. 晒加班晒熬夜……“晒勤奋”是一种病!
  3. 线上环境HBASE-1.2.0出现oldWALs无法自动回收情况;
  4. Android自定义退出弹出框
  5. 动人配乐是如何炼成的?带您了解《花之灵》背景原声的幕后制作秘辛
  6. 数据结构题:根据所给权值设计相应的哈夫曼树,并设计哈夫曼编码
  7. C++ 继承 | 对象切割、菱形继承、虚继承、对象组合
  8. Tkinter图片按钮
  9. TikZ绘图示例——尺规作图:线段的任意等分
  10. QEMU+GDB调试方法
  11. vue是否可以做行车轨迹_特斯拉-概念自行车,是否可以走进大众生活
  12. libcaffe.so: undefined reference to `cv.read
  13. Windows xp 驱动EPSON MT532打印小票始末
  14. 计算机网络第七版 部分详细答案
  15. 这些书你读过一多半,你就是编程大牛!
  16. 2018年迎春杯复赛入围名单(三年级)
  17. java pem 读取_PEM_密钥对生成与读取方法
  18. Oracle语句函数
  19. 解决QQ小游戏、微信小游戏 getLaunchOptionsSync()获取的数据为旧数据
  20. Android开发实用小技巧九——内嵌WebView的使用(内置浏览器)

热门文章

  1. 物探化探计算机技术官网,物探化探计算技术四川省科技期刊
  2. camera fv5专业版2019_极致相机 Camera FV-5 v5.2.0
  3. 音频在线转文字的方法
  4. 为啥登录微软账号时,切换dns会好使
  5. linux power_评估Linux on POWER的性能
  6. python判断字符串是否为纯中文汉字
  7. 出现高并发的几种问题
  8. Spring 3.0 OXM - Spring 3.0 框架新特性
  9. 统计学考研和计算机考研真题,20考研北大数院统计/叉院数据科学(统计学)备考经验...
  10. 思灵机器人与您相约德国慕尼黑展