Golang学习笔记01
一、知名编程语⾔发展简史
(⼀)、知名编程语⾔或系统的发展简史
1、B语⾔之⽗
Ken Thompson(肯.汤普森)。该语⾔得名于汤姆森的妻⼦
Bonnie,⼀⻔剑桥于60年代中期开发的语⾔。
2、C语⾔之⽗
美国著名计算机专家、C语⾔发明⼈、UNIX之⽗Dennis
Ritchie(丹尼斯·⾥奇)在1969-1973年期间发明了C语⾔和Unix操作系统。
3、Unix之⽗
Dennis Ritchie(丹尼斯·⾥奇)及Ken Thompson(肯.汤普森)
在73年左右发明了Unix操作系统。两⼈因此获得1983年图灵奖。
4、C++之⽗
Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)。1982年,美国
⻉尔实验室的Bjarne Stroustrup博⼠在C语⾔的基础上引⼊并扩充了⾯向对象的
概念,发明了—种新的程序语⾔。为了表达该语⾔与c语⾔的渊源关系,它被命
名为C++。
5、Python之⽗
Guido von Rossum(吉多.范.罗苏姆)。1989年,为了打发圣
诞节假期,Guido开始写Python语⾔的编译/解释器。1994年发布1.0版本。1995
年9⽉发布了Python3.5版。
6、Java
James Gosling(詹姆斯.⾼斯林)。1991年开发Oak,1994年更名为
Java。1995年5⽉正式发布。
7、Javascript
Brendan Eich(布兰登.艾奇)。艾奇对Java⼀点兴趣也没有,为
了应付公司安排的任务,他于1995年5⽉只⽤10天时间就把Javascript设计出来
了。
8、Go语⾔
Go的三个作者分别是:Robert Griesemer(罗伯特.格利茨默),
Rob Pike(罗伯.派克) 和 Ken Thompson(肯.汤普森)。
- Robert在开发Go之前是Google V8、Chubby和HotSpot JVM的主要贡献
者; - Rob主要是Unix、UTF-8、plan9的作者;
- Ken主要是B语⾔、C语⾔的作者、Unix之⽗。
(⼆)、Go语⾔主要发展过程
1、2007年9⽉,Rob Pike(罗伯.派克) 正式命名为Go;
2、2008年5⽉,Google全⼒⽀持该项⽬;
3、2009年11⽉,Go将代码全部开源,它获得了当年的年度语⾔;
4、2012年3⽉28⽇,Go发布第⼀个正式的稳定版本。
- Go稳定版发布时,Go Team承诺后续的版本都会兼容之前的版本。这对
于开发者来说⾮常重要,Go后续的版本也⼀直在提升内功,从⽽可以让⽤
户⽆缝的升级Go版本。
⼆、Go语⾔的特点及优势
(⼀)、Go语⾔设计初衷(为什么会设计Go语⾔?)
1、设计Go语⾔是为了解决当时Google开发遇到的问题
- ⼤量的C++代码,同时⼜引⼊了Java和Python
- 成千上万的⼯程师
- 数以万计⾏的代码
- 分布式的编译系统
- 数百万的服务器
2、Google开发中的痛点
- 编译慢
- 失控的依赖
- 每个⼯程师只是⽤了⼀个语⾔⾥⾯的⼀部分
- 程序难以维护(可读性差、⽂档不清晰等)
- 更新的花费越来越⻓
- 交叉编译困难
3、如何解决当前的问题和痛点?
- Go希望成为互联⽹时代的C语⾔。多数系统级语⾔(包括Java和C#)的
根本编程哲学来源于C++,将C++的⾯向对象进⼀步发扬光⼤。但是Go语⾔
的设计者却有不同的看法,他们认为值得学习的是C语⾔。C语⾔经久不衰
的根源是它⾜够简单。因此,Go语⾔也是⾜够简单。 - 所以,他们当时设计Go的⽬标是为了消除各种缓慢和笨重、改进各种低
效和扩展性。Go是由那些开发⼤型系统的⼈设计的,同时也是为了这些⼈
服务的;它是为了解决⼯程上的问题,不是为了研究语⾔设计;它还是为了
让我们的编程变得更舒适和⽅便。 - 但是结合Google当时内部的⼀些现实情况,如很多⼯程师都是C系的,所
以新设计的语⾔⼀定要易学习,最好是类似C的语⾔;20年没有出新的语⾔
了,所以新设计的语⾔必须是现代化的(例如内置GC)等情况。最后根据
实战经验,他们向着⽬标设计了Go这个语⾔。4、Go语⾔的特⾊:
- 没有继承多态的⾯向对象
- 强⼀致类型
- interface不需要显式声明(Duck Typing)
- 没有异常处理(Error is value)
- 基于⾸字⺟的可访问特性
- 不⽤的import或者变量引起编译错误
- 完整⽽卓越的标准库包
- Go内置runtime(作⽤是性能监控、垃圾回收等)
(⼆)、Go语⾔的优势
1、学习曲线容易
Go语⾔语法简单,包含了类C语法。因为Go语⾔容易学习,所以⼀个普通
的⼤学⽣花⼏个星期就能写出来可以上⼿的、⾼性能的应⽤。在国内⼤家都追求
快,这也是为什么国内Go流⾏的原因之⼀。
2、效率:快速的编译时间,开发效率和运⾏效率⾼
开发过程中相较于 Java 和 C++呆滞的编译速度,Go 的快速编译时间是⼀
个主要的效率优势。Go拥有接近C的运⾏效率和接近PHP的开发效率。
3、出身名⻔、⾎统纯正
之所以说Go出身名⻔,从Go语⾔的创造者就可⻅端倪,Go语⾔绝对⾎统纯
正。其次Go语⾔出⾃Google公司,Google在业界的知名度和实⼒⾃然不⽤多
说。Google公司聚集了⼀批⽜⼈,在各种编程语⾔称雄争霸的局⾯下推出新的
编程语⾔,⾃然有它的战略考虑。⽽且从Go语⾔的发展态势来看,Google对它
这个新的宠⼉还是很看重的,Go⾃然有⼀个良好的发展前途。
4、⾃由⾼效:组合的思想、⽆侵⼊式的接⼝
Go语⾔可以说是开发效率和运⾏效率⼆者的完美融合,天⽣的并发编程⽀
持。Go语⾔⽀持当前所有的编程范式,包括过程式编程、⾯向对象编程、⾯向
接⼝编程、函数式编程。程序员们可以各取所需、⾃由组合、想怎么玩就怎么
玩。
5、强⼤的标准库
这包括互联⽹应⽤、系统编程和⽹络编程。Go⾥⾯的标准库基本上已经是
⾮常稳定了,特别是我这⾥提到的三个,⽹络层、系统层的库⾮常实⽤。
6、部署⽅便:⼆进制⽂件,Copy部署
这⼀点是很多⼈选择Go的最⼤理由,因为部署太⽅便了,所以现在也有很
多⼈⽤Go开发运维程序。
7、简单的并发
- Go 是⼀种⾮常⾼效的语⾔,⾼度⽀持并发性。Go是为⼤数据、微服务、并
发⽽⽣的⼀种编程语⾔。 - Go 作为⼀⻔语⾔致⼒于使事情简单化。它并未引⼊很多新概念,⽽是聚
焦于打造⼀⻔简单的语⾔,它使⽤起来异常快速并且简单。其唯⼀的创新之
处是 goroutines 和通道。Goroutines 是 Go ⾯向线程的轻量级⽅法,⽽通
道是 goroutines 之间通信的优先⽅式。 - 创建 Goroutines 的成本很低,只需⼏千个字节的额外内存,正由于此,
才使得同时运⾏数百个甚⾄数千个 goroutines 成为可能。可以借助通道实
现 goroutines 之间的通信。Goroutines 以及基于通道的并发性⽅法使其⾮
常容易使⽤所有可⽤的 CPU 内核,并处理并发的 IO。相较于
Python/Java,在⼀个 goroutine 上运⾏⼀个函数需要最⼩的代码。8、稳定性
Go拥有强⼤的编译检查、严格的编码规范和完整的软件⽣命周期⼯具,具有很强的稳定性,稳定压倒⼀切。那么为什么Go相⽐于其他程序会更稳定呢?
这是因为Go提供了软件⽣命周期(开发、测试、部署、维护等等)的各个环节
的⼯具,如go tool、gofmt、go test。(三)、Go语⾔的核⼼特性和优势
- Go主要有静态语⾔、函数多返回值、天⽣并发、内置GC(⾃动垃圾回
收)、安全性⾼、语法简单、编译快速这⼏个⽅⾯的特性。这些特性决定了
Go的三个⾼富帅特性:运⾏快、开发快和部署快。- 静态类型语⾔是指在编译时变量的数据类型即可确定的语⾔,要求在使⽤变量之前必须声明数据类型(具有类型推导能⼒的现代语⾔可能能够部分减轻这个要求);
- 动态类型语⾔是在运⾏时确定数据类型的语⾔,变量使⽤之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。
- Go语⾔是⽬前项⽬转型⾸选的语⾔,也是软件⼯程师转型⾸选的语⾔,
是添加技术栈的⾸选语⾔。Go常常是⼀种为转型⽽量身定制的语⾔。(四)、Go语⾔能开发什么?
- 1、服务器编程
以前你如果使⽤C或者C++做的那些事情,⽤Go来做很合适,
例如处理⽇志、数据打包、虚拟机处理、⽂件系统等。 - 2、分布式系统、数据库代理器、中间件等,例如Etcd。
- 3、⽹络编程,这⼀块⽬前应⽤最⼴,包括Web应⽤、API应⽤、下载应⽤,⽽且Go内置的net/http包基本上把我们平常⽤到的⽹络功能都实现了。
- 4、数据库操作
- 5、开发云平台,⽬前国外很多云平台在采⽤Go开发
(五)、采⽤Go语⾔的国内外知名企业
- 1、Go发布之后,很多公司特别是云计算公司开始⽤Go重构他们的基础架构,很
多都是直接采⽤Go进⾏了开发,最近热⽕朝天的Docker就是采⽤Go开发的; - 2、采⽤Go的⼀些国外公司,如Google、Docker、Apple、Cloud Foundry、
CloudFlare、Couchbase、CoreOS、Dropbox、MongoDB、AWS等公司; - 3、采⽤Go开发的国内企业:如阿⾥云CDN、百度、⼩⽶、七⽜、PingCAP、华
为、⾦⼭软件、猎豹移动、饿了么等公司。
参考相关源
下载安装
由于官方网站需要翻墙,所有我们在国内可以去
Go语言中文网中进行下载安装
其中提供多种操作系统环境的安装,安装形式分为压缩版和安装包版本