- 1. 起源和发展
- 时间轴
- https://golang.org/">Go官网:https://golang.org/
- https://gowalker.org/">Go语言相关资源的搜索引擎页面:https://gowalker.org/
- Go Tour">Go语言还有一个运行在Google App Engine上的Go Tour
- 2. Go语言特性
- 3. 特性缺失
- 4. 小结
1. 起源和发展
Go是一门开放源码的编程语言,可容器的构建简单、可靠和高效的软件;
Go语言起源2007年,并于2009年正式对外发布。它从 2009 年9月21日开始作为谷歌公司20%兼职项目,即相关员工利用20%的空余时间来参与Go语言的研发工作。该项目的三位领导者均是著名的IT工程师:Robert Griesemer,参与开发 Java HotSpot虚拟机;Rob Pike,Go语言项目总负责人,贝尔实验室Unix团队成员,参与的项目包括Plan 9,Inferno 操作系统和Limbo编程语言;Ken Thompson,贝尔实验室Unix团队成员,C语言、Unix和Plan 9的创始人之一,与 Rob Pike共同开发了UTF-8字符集规范。自2008年1月起,Ken Thompson就开始研发一款以C语言为目标结果的编译器来拓展Go语言的设计思想。
在2008年年中,Go语言的设计工作接近尾声,一些员工开始以全职工作状态投入到这个项目的编译器和运行实现上。Ian Lance Taylor也加入到了开发团队中,并于2008年5月创建了一个gcc前端。
Russ Cox 加入开发团队后着手语言和类库方面的开发,也就是Go语言的标准包。在2009年10月30日,Rob Pike以 Google Techtalk的形式第一次向人们宣告了Go语言的存在。
直到2009年11月10日,开发团队将Go语言项目以 BSD-style授权(完全开源)正式公布了Linux和Mac OS X 平台上的版本。Hector Chu于同年11月22日公布了Windows版本。
作为一个开源项目,Go语言借助开源社区的有生力量达到快速地发展,并吸引更多的开发者来使用并改善它。自该开源项目发布以来,超过200名非谷歌员工的贡献者对Go语言核心部分提交了超过1000个修改建议。在过去的18个月里,又有150开发者贡献了新的核心代码。这俨然形成了世界上最大的开源团队,并使该项目跻身Ohloh前2%的行列。大约在2011年4月10日,谷歌开始抽调员工进入全职开发Go语言项目。开源化的语言显然能够让更多的开发者参与其中并加速它的发展速度。Andrew Gerrand在2010年加入到开发团队中成为共同开发者与支持者。
在Go语言在2010年1月8日被Tiobe(闻名于它的编程语言流行程度排名)宣布为“2009 年年度语言”后,引起各界很大的反响。目前Go语言在这项排名中的最高记录是在2017年1月创下的第13名,流行程度2.325%。
时间轴
- 2007年9月21日:雏形设计
- 2009年11月10日:首次公开发布
- 2010年1月8日:当选2009年年度语言
- 2010年5月:谷歌投入使用
- 2011年5月5日:Google App Engine支持Go语言
Go官网:https://golang.org/
Go语言相关资源的搜索引擎页面:https://gowalker.org/
Go语言还有一个运行在Google App Engine上的Go Tour
也可以通过执行命令go install go-tour.googlecode.com/hg/gotour
安装到你的本地机器上,对于中文读者,可以通过go install https://bitbucket.org/mikespook/go-tour-zh/gotour
来安装。
2. Go语言特性
Go 语言从本质上(程序和结构方面)来实现并发编程。
因为 Go 语言没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同。但是它通过接口(interface)的概念来实现多态性。Go 语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说。因此可以说这是一门混合型的语言。
在传统的面向对象语言中,使用面向对象编程技术显得非常臃肿,它们总是通过复杂的模式来构建庞大的类型层级,这违背了编程语言应该提升生产力的宗旨。
函数是 Go 语言中的基本构件,它们的使用方法非常灵活。
Go 语言使用静态类型,所以它是类型安全的一门语言,加上通过构建到本地代码,程序的执行速度也非常快。
作为强类型语言,隐式的类型转换是不被允许的,记住一条原则:让所有的东西都是显式的。
Go 语言其实也有一些动态语言的特性(通过关键字 var),所以它对那些逃离 Java 和 .Net 世界而使用 Python、Ruby、PHP 和 JavaScript 的开发者们也具有很大的吸引力。
Go 语言支持交叉编译,比如说你可以在运行 Linux 系统的计算机上开发运行 Windows 下运行的应用程序。这是第一门完全支持 UTF-8 的编程语言,这不仅体现在它可以处理使用 UTF-8 编码的字符串,就连它的源码文件格式都是使用的 UTF-8 编码。Go 语言做到了真正的国际化!
3. 特性缺失
许多能够在大多数面向对象语言中使用的特性Go语言都没有支持,但其中的一部分可能会在未来被支持
- 为了简化设计,不支持函数重载和操作符重载
- 为了避免在C/C++开发中的一些BUG和混乱,不支持隐式转换
- Go语言通过另一种途径实现面向对象设计来放弃类和类型的继承
- 尽管在接口的使用方面可以实现类似变体类型的功能,但本身不支持变体类型
- 不支持动态加载代码
- 不支持泛型
- 通过recover和panic来替代异常机制
- 不支持静态变量
关于Go语言开发团队对于这些方面的讨论,可以通过Go常见问题页面来查看
4. 小结
- 简化问题,易于学习
- 内存管理,简洁语法,易于使用
- 快速编译,高效开发
- 高效执行
- 并发支持,轻松驾驭
- 静态类型
- 标准类库,规范统一
- 易于部署
- 文档全面
- 免费开源