Go语言的前世今生

一、 为什么需要一个新的语言

最近十年来,C/C++在计算领域没有很好得到发展,并没有新的系统编程语言出现。对开发程度和系统效率在很多情况下不能兼得。要么执行效率高,但低效的开发和编译,如C++;要么执行低效,但拥有有效的编译,如.NET、Java;所以需要一种拥有较高效的执行速度、编译速度和开发速度的编程语言,Go就横空出世了。

传统的语言比如c++,大家花费太多时间来学习如何使用这门语言,而不是如何更好的表达写作者的思想,同时编译花费的时间实在太长,对于编写-编译-运行这个链条来说周期太长。动态语言如Python,由于没有强类型的约束,很多问题需要在运行时发现,这种低级错误更应该交给编译器来发现。

  • 人力成本越来越高

  • 机器越来越便宜

  • 机器的性能越来越厉害

  • 在开发效率和运行速度上达到平衡

go出现之前,无论汇编语言、还是动态脚本语言,在执行效率和开发效率上都不能兼备。

执行效率 execution speed: C/C++ > Java > PHP
开发效率 developing efficiency: PHP > Java > C/C++

二、 谷歌工程师的20%时间

谷歌的“20%时间”工作方式,允许工程师拿出20%的时间来研究自己喜欢的项目。语音服务Google Now、谷歌新闻Google News、谷歌地图Google Map上的交通信息等,全都是20%时间的产物。

Go语言最开始也是20%时间的产物。

三、 创始人

Go的三个作者分别是: Rob Pike(罗伯.派克),Ken Thompson(肯.汤普森)和Robert Griesemer(罗伯特.格利茨默) 。

  • Rob Pike:曾是贝尔实验室(Bell Labs)的Unix团队,和Plan 9操作系统计划的成员。他与Thompson共事多年,并共创出广泛使用的UTF-8 字元编码。

  • Ken Thompson:主要是B语言、C语言的作者、Unix之父。1983年图灵奖(Turing Award)和1998年美国国家技术奖(National Medal of Technology)得主。他与Dennis Ritchie是Unix的原创者。Thompson也发明了后来衍生出C语言的B程序语言。

  • Robert Griesemer:在开发Go之前是Google V8、Chubby和HotSpot JVM的主要贡献者。

此外还有Plan 9开发者Russ Cox、和曾改善目前广泛使用之开原码编译器GCC的Ian Taylor。

四、 Go的缔造与发展

4.1 Go的命名

这是一封由 Rob Pike 在 2007 年 9 月 25 号,星期二,下午 3:12 回复给 Robert Griesemer、Ken Thompson 的有关编程语言讨论主题的邮件,邮件正文大意为:在开车回家的路上我得到了些灵感。1.给这门编程语言取名为“go”,它很简短,易书写。工具类可以命名为:goc、 gol、goa。交互式的调试工具也可以直接命名为“go”。语言文件后缀名为 .go 等等

这就是 Go 语言名字的来源,自此之后 Robert、Rob 和 Ken 三个人开始在 Google 内部进行了研发,一直到了 2009 年,Go 正式开源了,Go 项目团队将 2009 年 11 月 10 日,即该语言正式对外开源的日字作为其官方生日。源代码最初托管在 http://code.google.com 上,之后几年才逐步的迁移到 GitHub 上。

4.2 Go的发展过程中的记事

第一个事情是在开发设计 Go 语言过程中的第一个重大惊喜是收到了以下这封邮件:

这是一封由 Ian Lance Taylor 在 2008 年 6月 7 日(星期六)的晚上 7:06 写给 Robert Griesemer、Rob Pike、 Ken Thompson 的关于 Go gcc 编译器前端的邮件。邮件正文大意如下:我的同事向我推荐了这个网站 http://…/go_lang.html 。这似乎是一门很有趣的编程语言。我为它写了一个 gcc 编译器前端。虽然这个工具仍缺少很多的功能,但它确实可以编译网站上展示的那个素数筛选程序了。

Ian Lance Taylor 的加入以及第二个编译器 (gcc go) 的实现 在带来震惊的同时,也伴随着喜悦。这对 Go 项目来说不仅仅是鼓励,更是一种对可行性的证明。语言的第二次实现对制定语言规范和确定标准库的过程至关重要,同时也有助于保证其高可移植性,这也是 Go 语言承诺的一部分。自此之后 Ian Lance Taylor 成为了设计和实现 Go 语言及其工具的核心人物。

**第二件事情是 Russ Cox 在2008年带着他的语言设计天赋和编程技巧加入了刚成立不久的 Go 团队。**Russ 发现 Go 方法的通用性意味着函数也能拥有自己的方法,这直接促成了 http.HandlerFunc 的实现,这是一个让 Go 一下子变得无限可能的特性。Russ 还提出了更多的泛化性的想法,比如 io.Reader 和 io.Writer 接口,奠定了所有 I/O 库的整体结构。

**第三件事情是聘请了安全专家 Adam Langley 帮助 Go 走向 Google 外面的世界。**Adam 为 Go 团队做了许多不为外人知晓的工作,包括创建最初的 http://golang.org 网站以及 build dashboard。不过他最大的贡献当属创建了 cryptographic 库。起先,在我们中的部分人看来,这个库无论在规模还是复杂度上都不成气候。但是就是这个库在后期成为了很多重要的网络和安全软件的基础,并且成为了 Go 语言开发历史的关键组成部分。许多网络基础设施公司,比如 Cloudflare,均重度依赖 Adam 在 Go 项目上的工作,互联网也因它变得更好。我记得当初 beego 设计的时候,session 模块设计的时候也得到了 Adam 的很多建议,因此,就 Go 而言,我们由衷地感谢 Adam。

**第四个事情就是一家叫做 Docker 的公司。**就是使用 Go 进行项目开发,并促进了计算机领域的容器行业,进而出现了像 Kubernetes 这样的项目。现在,我们完全可以说 Go 是容器语言,这是另一个完全出乎意料的结果。

除了大名鼎鼎的Docker,完全用GO实现。业界最为火爆的容器编排管理系统kubernetes完全用GO实现。之后的Docker Swarm,完全用GO实现。除此之外,还有各种有名的项目,如etcd/consul/flannel,七牛云存储等等
均使用GO实现。有人说,GO语言之所以出名,是赶上了云时代。但为什么不能换种说法?也是GO语言促使了云的发展。

除了云项目外,还有像今日头条、UBER这样的公司,他们也使用GO语言对自己的业务进行了彻底的重构。

五、Go语言logo和版本

1、 Go的logo

1.1 Go语言的logo

Go语言的logo就是很简洁的GO两个字母。

1.2 Go的吉祥物

Go之所以叫Go,是想表达这门语言的运行速度、开发速度、学习速度(develop)都像gopher一样快。

gopher是一种生活在加拿大的小动物,go的吉祥物就是这个小动物, 它的中文名叫做囊地鼠,他们最大的特点就是挖洞速度特别快,当然可能不止是挖洞啦。

2、Go的官网

3、 Go语言主要发展过程

  • 2007年9月,雏形设计 ,Rob Pike(罗伯.派克) 正式命名为Go;

  • 2008年5月,Google全力支持该项目;

  • 2009年11月10日,首次公开发布,Go将代码全部开源,它获得了当年的年度语言;

  • 2011年3月16日,Go语言的第一个稳定(stable)版本r56发布。

  • 2012年3月28日,Go语言的第一个正式版本Go1发布。

  • 2013年4月04日,Go语言的第一个Go 1.1beta1测试版发布。

  • 2013年4月08日,Go语言的第二个Go 1.1beta2测试版发布。

  • 2013年5月02日,Go语言Go 1.1RC1版发布。

  • 2013年5月07日,Go语言Go 1.1RC2版发布。

  • 2013年5月09日,Go语言Go 1.1RC3版发布。

  • 2013年5月13日,Go语言Go 1.1正式版发布。

  • 2013年9月20日,Go语言Go 1.2RC1版发布。

  • 2013年12月1日,Go语言Go 1.2正式版发布。

  • 2014年6月18日,Go语言Go 1.3版发布。

  • 2014年12月10日,Go语言Go 1.4版发布。

  • 2015年8月19日,Go语言Go 1.5版发布,本次更新中移除了”最后残余的C代码”。

  • 2016年2月17日,Go语言Go 1.6版发布。

  • 2016年8月15日,Go语言Go 1.7版发布。

  • 2017年2月17日,Go语言Go 1.8版发布。

  • 2017年8月24日,Go语言Go 1.9版发布。

  • 2018年2月16日,Go语言Go 1.10版发布。

  • 2018年8月24日,Go语言Go 1.11版发布。

  • 2019年2月25日,GO语言Go1.12版发布。

Go 语言起源 2007 年,并于 2009 年正式对外发布。它从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关员工利用 20% 的空余时间来参与 Go 语言的研发工作。

其实可以看到,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语言在服务端开发方面,几乎抹平了所有的弱点。

直到今年的2月25日,Go语言发布最新的版本是Go 1.12。

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

Go稳定版发布时,Go Team承诺后续的版本都会兼容之前的版本。这对于开发者来说非常重要,Go后续的版本也一直在提升内功,从而可以让用户无缝的升级Go版本。

六、最后

Go语言是谷歌2009年发布的第二款开源编程语言(系统开发语言),它是基于编译、垃圾收集和并发的编程语言。
Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美 C / C++代码的速度,而且更加安全、支持并行进程。作为出现在21世纪的语言,其近C的执行性能和近解析型语言的开发效率,以及近乎于完美的编译速度,已经风靡全球。特别是在云项目中,大部分都使用了Golang来开发。不得不说,Golang早已深入人心。而对于一个没有历史负担的新项目,Golang或许就是个不二的选择。
很多人将Go语言称为21世纪的C语言,因为Go不仅拥有C的简洁和性能。而且还很好的提供了21世纪互联网环境下服务端开发的各种实用特性。被称为Go语言之父的罗勃·派克(Rob Pike)就曾说过,你是否同意Go语言,取决于你是认可少就是多,还是少就是少(Less is more or less is less)。Go语言的整个设计哲学就是:将简单、实用体现得淋漓尽致。
如今 Go 已经是云计算编程语言,GO语言背靠Google这棵大树,又不乏牛人坐镇,是名副其实的“牛二代”。想象一下:一个只有十几年发展经历的编程语言,已经成为了如此巨大而且正在不断发展的行业的主导者,这种成功是每个人都无法想象的。

整理此博客只为方便往后翻阅复习,侵删。

GO-2-go语言的前世今生相关推荐

  1. 【C语言简介】C语言的前世今生

    C语言的发展历史: 20世纪70年代初,贝尔实验室的Dennis Richie 等人在B语言基础上开发出C语言,最初是作为UNIX的开发语言: 20世纪70年代末,随着微型计算机的发展,C语言开始移植 ...

  2. 理解C语言——从小菜到大神的晋级之路(1)——引言:C语言的前世今生

    第一课的视频链接点这里 C语言是现在应用最为广泛的编程语言之一,也是现在依然流行的编程语言中历史最悠久的一种之一.在目前业界广泛使用的编程语言中,许多 种语言是以C为基础发展而来.在多类大学的工程类专 ...

  3. C++和C语言的前世今生,两者有什么血缘关系?

    C语言虽说经常和C++在一起被大家提起,但可千万不要以为它们是一个东西.现在我们常用的C语言是C89标准,C++是C++99标准的.C89就是在1989年制定的标准,如今最新的是C11和C++11标准 ...

  4. 再白也能学会的C-C语言的前世今生

    爆竹声中一岁除,春风送暖入屠苏.千门万户曈曈日,总把新桃换旧符.今天在这个日子里,我们回首往昔,既然聊到要学C语言,不得知道C语言是糖在哪里甜的,醋打哪里酸的啊. C语言是在 70 年代初问世的.一九 ...

  5. C专家编程 —— C语言的前世今生

    文章目录 C的史前阶段 C的早期体验 K&R C 和 ANSI C const 类型转换 一个微妙的bug 使用无符号建议 GNU和pragmas pragma指示符 C的史前阶段 UNIX系 ...

  6. C语言的前世今生与后世

    一.起源于ALGOL家族 IAL (ALGOL58)>>ALGOL60>>CPL>>BCPL>>B>>C>>C++>> ...

  7. 第一章:Java语言的前世今生-种族天赋:大谈Java成功之道

    种族天赋:大谈Java成功之道 来源:https://edu.csdn.net/course/play/27274/361053 一.java语言的特点: 1.简单.高效:和C++相比 2.面向对象 ...

  8. C 语言还值得学习吗?C 语言会过时吗?C 语言解惑

    C 语言还值得学吗? 答案是肯定的. 第一,学习C有助于更好的理解C++,Java,C#,Perl以及其他基于C的特性的语言.第一开始就学习其他语言的程序员往往不能很好的掌握继承自C语言的基本特性. ...

  9. 程序设计方法与技术——C语言 程序设计概述

    C语言的基础知识,你知道吗? 目录 一.程序是什么? 二.程序设计语言是什么? 三.C语言程序能解决什么问题? 1.C语言的前世今生 2.C程序的实现过程 四.一个C语言程序的基本结构 1.案例引入 ...

最新文章

  1. [渝粤教育] 盐城工学院 水处理微生物学 参考 资料
  2. linux防火墙配置连接atlas,ATLAS在ubuntu下的安装使用
  3. Java多线程多个线程之间共享数据
  4. HDU 4050 wolf5x 概率dp 难度:1
  5. php 不通过表单post,php – 简单表单不通过_POST发送数据
  6. 熊猫烧香C语言源代码,熊猫烧香病毒是不是用C语言编的
  7. JSONP原理及实现
  8. Zemax单透镜设计
  9. appstore ip地址
  10. 订单系统新增订单接口负载测试性能问题及定位
  11. Android 自定义视频录制终极解决方案(翻转问题)
  12. python数据库进阶
  13. JMeter-配置元件-HTTP授权管理器
  14. java 权限 部分截图
  15. java 实现ps功能_java 简单图片,可以实现ps的几个小滤镜
  16. 音视频开发第一课-使用C语言开发视频播放器 650元IT外包开发全程记录
  17. ​6. 独享锁 VS 共享锁
  18. 大数据权限管理-Security和hue案例操作(3)
  19. 统计遗传学:第三章,群体遗传
  20. 旺店通·企业奇门与金蝶云星空对接集成查询采购入库单连通采购入库新增(采购入库单 all)

热门文章

  1. 简述一下你对HTML语义化的理解
  2. 一台手机即可完成 3D 建模,功能有多强大? #Luma AI
  3. python内置函数绝对值图像_Python内置函数
  4. 微信小程序动画之圆形进度条
  5. 嵌入式linux屏保设置,嵌入式系统 屏保设置
  6. NX CAM 加工模块二次开发视频教程全集目录(胡君录制)
  7. python docx自动插入图片
  8. 解构微信:打败微信的将会是一款什么样的产品?
  9. 苹果磁盘目录不具有读写权限怎么办
  10. PHP 数据脱敏显示,数据脱敏处理