聊聊Go语言

在这里插入图片描述

Go语言的Logo

作为程序员,我们每天会用到大量的编程语言,打开界面会碰到很多logo

在正式学习Go语言之前,我们先来了解一下Go语言的Logo。

也就是它,下面这个动物,gopher [ˈɡoʊfər] ,囊地鼠,是北美的一种地鼠。也有人说这是土拨鼠,大家自行理解吧。

故事

Rob Pike是Go的发明者之一,贝尔实验室UNIX小组成员之一,UTF-8的设计人。他最喜欢做似乎就是

  • 发明操作系统
  • 发明编辑器
  • 发明语言

Go语言这萌萌的吉祥物是由Rob Pike的妻子 Renee French绘制的。

就是她设计出了Golang吉祥物,可爱的 Gordon [ˈgɔrdən],比心心!

谷歌工程师的20%时间

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

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

Go语言的创始人

为什么需要一个新的语言

C 系统效率 开发起来比较复杂

Java 开发相对来说简单了 (面向对象—)更符合人的思维 很多大型企业在用 培训机构 ssm ssh springboot java 人才多 单价低

效率要高 + 开发简单 = 兼顾 (创造一种新语言 Go) 12 年 移动端 智能手机 85 95 时代进步了,我们需要一些更高效的东西,而不是一些历史的东西

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

15年 脚本 (游戏辅助)

师傅 (逆向的 , C 、C ++ 底层编译) 8:30 - 40分钟 (改了部分代码 —) 40分钟

崩溃了 Bug 强类型 (代码要严格按照要求,出错了,在开发的时候就会报错!)

随便的语言 (代码---- 编译器(优化) — 程序) JS 凌乱 () 跑起来后才能发现 js (弱类型的语言,约束比较小,开发轻松,低级错误)

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

每个语言都有自己的优点 = 整合 12年 Go

人力成本越来越高 (少做点事,提高效率)

机器越来越便宜 (机器发挥性能)

机器的性能越来越厉害

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

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

这个世界上总有一帮人在想着做这种事情,别人的用的不舒服,就自己开发了一个!

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和Java虚拟机 HotSpot JVM的主要贡献者。

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

Go语言的发展

故事一:名字的来源

这是一封由 Rob Pike 在 2007 年 9 月 25 号,星期二,下午 3:12 回复给 Robert Griesemer、Ken Thompson 的有关编程语言讨论主题的邮件。

邮件正文大意为:

斗罗大陆.txt 文本类型

.java 文件后缀 Java代码文件

.mp4 文件类型

.jpg

.c

.py

.go

在开车回家的路上我得到了些灵感,给这门编程语言取名为“go”,它很简短,易书写。工具类可以命名为:go c、 go l、go a。交互式的调试工具也可以直接命名为“go”。语言文件后缀名为 .go 等等,

这就是 Go 语言名字的来源。

自此之后 Robert、Rob 和 Ken 三个人开始在 Google 内部进行了研发,一直到了 2009 年,Go 正式开源了

Go 项目团队将 2009 年 11 月 10 日,即该语言正式对外开源的日字作为其官方生日。

源代码最初托管在 http://code.google.com 上,之后几年才逐步的迁移到 GitHub 上。 Go语言现在的地址 GitHub。

任务一:注册github账号和gitee账号。用来存放我们未来写的代码或者下载一些开源项目使用 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 语言及其工具的核心人物。3 + 1

故事三:http.HandlerFunc、I/O 库

Russ Cox 在2008年带着他的语言设计天赋和编程技巧加入了刚成立不久的 Go 团队。

Go的基础 (定义一些变量 、 判断循环 。解题,算术)

一段代码的集合 (1 + 1 = 2)

Go 它十分的灵活和 C、Java 有很大的区别

Russ 发现 Go 方法的通用性意味着函数也能拥有自己的方法,这直接促成了 http.HandlerFunc 的实现,让 Go 一下子变得无限可能的特性。

Russ 还提出了更多的泛化性的想法,比如 io.Reader 和 io.Writer 接口,奠定了所有 I/O 库的整体结构。

故事四:cryptographic

安全专家 Adam Langley 帮助 Go 走向 Google 外面的世界。

Adam 为 Go 团队做了许多不为外人知晓的工作,包括创建最初的 http://golang.org 网站以及 build dashboard。

不过他最大的贡献当属创建了 cryptographic 库。

起先,在我们中的部分人看来,这个库无论在规模还是复杂度上都不成气候。但是就是这个库在后期成为了很多重要的网络和安全软件的基础,并且成为了 Go 语言开发历史的关键组成部分。

许多网络基础设施公司,比如 Cloudflare,均重度依赖 Adam 在 Go 项目上的工作,互联网也因它变得更好。我记得当初 beego 设计的时候,session 模块设计的时候也得到了 Adam 的很多建议,因此,就 Go 而言,我们由衷地感谢 Adam。

越来越完善

go的底层语言是什么? C

1.5 版本的时候 Go语言重写了Go语言 1.5 + Go 汇编、计算机指令

第三方库,还依赖于C 。

开发Go、只要安装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性能等方面进行了持续不断的优化。

故事五:Docker、Kubernetes

云 资源消耗

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

除了大名鼎鼎的Docker,完全用GO实现。业界最为火爆的容器编排管理系统kubernetes完全用GO实现。之后的Docker Swarm,完全用GO实现。越来越多的人开始加入和关注!=== Docker 1

除此之外,还有各种有名的项目,如etcd/consul/flannel,七牛云存储等等 均使用GO实现。有人说,GO语言之所以出名,是赶上了云时代。但为什么不能换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值