Golang 前世今生

谷歌工程师的20%时间
谷歌的 20%时间 工作方式 允许工程师20%的时间来研究自己喜欢的项目
语音服务Google Now
谷歌新闻Google News
谷歌地图Google Map上的交通信息等
全都是20%时间的产物
Go语言最开始也是20%时间的产物

创始人
三位领导者均是著名的 IT 工程师
罗伯特·格瑞史莫(Robert Griesemer)
Robert Griesemer is an employee of Google and one of the initial designers of the Go programming language. Prior to Go, Robert has worked on code generation for Google’s V8 JavaScript engine and Chubby,[1] a distributed lock manager for Google’s GFS distributed filesystem. He has also worked on the design and implementation of the domain-specific language Sawzall, the Java HotSpot virtual machine, and the Strongtalk system. He has also written a vectorizing compiler for the Cray Y-MP and an interpreter for APL.

罗勃特·派克(Rob Pike) 61岁
昵称为罗勃·派克(Rob Pike)
来自加拿大的程序员 曾经加入贝尔实验室
为 UNIX小组的成员
曾经参与过贝尔实验室九号计划、Inferno 与编程语言 Limbo的开发
他与肯·汤普逊共同开发了UTF-8

肯尼斯·汤普逊(Ken Thompson) 74岁
肯·汤普逊(英语:Ken Thompson) 是美国计算机科学学者和工程师
黑客文化圈子通常称他为“ken”[1]。在贝尔实验室工作期间 汤普逊设计和实现了Unix操作系统
他创造了B语言——C语言的前身 而且他是Plan 9操作系统的创造者和开发者之一
2006年 汤普逊进入Google公司工作 与他人共同设计了Go语言
他与丹尼斯·里奇同为1983年图灵奖得主
肯·汤普逊还参与过正则表达式和UTF-8编码的设计 改进了文本编辑器QED 创造了ed编辑器
他曾制造过专门用于下国际象棋的电脑 Belle 并创建了残局数据库

Go语言主要作者
肯•汤普逊
Ken Thompson
//en.wikipedia.org/wiki/Ken_Thompson
设计了B语言和C语言 创建了Unix和Plan 9操作系统 1983年图灵奖得主 Go的共同作者

罗布•派克
Rob Pike
//en.wikipedia.org/wiki/Rob_Pike
Unix小组的成员 参与Plan 9和Inferno操作系统 参与 Limbo和Go语言的研发 《UNIX编程环境》作者之一

罗伯特•格里泽默
Robert Griesemer
曾协助制作Java的HotSpot编译器和Chrome浏览器的JavaScript引擎V8

拉斯•考克斯
Russ Cox http://swtch.com/~rsc/
参与Plan 9操作系统的开发
Google Code Search项目负责人

伊安•泰勒
Ian Lance Taylor
GCC社区的活跃人物
gold连接器和GCC过程间优化LTO的主要设计者
Zembu公司的创始人

布拉德•菲茨帕特里克
Brad Fitzpatrick
//en.wikipedia.org/wiki/Brad_Fitzpatrick
LiveJournal 的创始人
著名开源项目memcached的作者

语言开发团队的空前强大
Go语言的优秀特性而兴奋之外
还非常看好这门语言的发展前景
当年那3位Google大牛
为什么要创建Go语言
2007几个大牛正在用 c + + 开发繁琐核心的工作
包括庞大的分布式集群 大牛觉得很闹心  c + +委员会来他们公司演讲 说 c + + 将要添加大概35种新特性
大牛的其中一个人 名为:Rob Pike 听后心中一万个xxx飘过
c + +特性还不够多吗?
简化 c + +应该更有成就感吧
Rob Pike和其他几个大牛讨论了怎么解决这个问题
过了一会 Rob Pike说要不我们自己搞个语言吧
名字叫 go 非常简短 容易拼写
其他几位大牛就说好啊
写下希望能有哪些功能
接下来的时间里 大牛们开心的讨论设计这门语言的特性 经过漫长的岁月 他们决定 以c语言为原型
以及借鉴其他语言的一些特性 来解放程序员 解放自己
2009年go语言诞生
大牛罗列出的Go要有的功能
规范的语法(不需要符号表来解析)
垃圾回收(独有)
无头文件
明确的依赖
无循环依赖
常量只能是数字
int和int32是两种类型
字母大小写设置可见性(letter case sets visibility)
任何类型(type)都有方法(不是类型)
没有子类型继承(不是子类)
包级别初始化以及明确的初始化顺序
文件被编译到一个包里
包package-level globals presented in any order
没有数值类型转换(常量起辅助作用)
接口隐式实现(没有“implement”声明)
嵌入(不会提升到超类)
方法按照函数声明(没有特别的位置要求)
方法即函数
接口只有方法(没有数据)
方法通过名字匹配(而非类型)
没有构造函数和析构函数
postincrement(如++i)是状态 不是表达式
没有preincrement(i++)和predecrement
赋值不是表达式
明确赋值和函数调用中的计算顺序(没有“sequence point”)
没有指针运算
内存一直以零值初始化
局部变量取值合法
方法中没有 this
分段的堆栈
没有静态和其它类型的注释
没有模板
内建string、slice和map
数组边界检查
使用Go的项目
.Docker
a set of tools for deploying Linux containers
.Doozer
a lock service by managed hosting provider Heroku
.Gogs
self-hosted Git Service.
.InfluxDB
an open source database specifically to handle time series data with high availability and high performance requirements.
.Juju
a service orchestration tool by Canonical, packagers of Ubuntu Linux

.Packer
a tool for creating identical machine images for multiple platforms from a single source configuration
.Snappy
a package manager for Ubuntu phone developed by Canonical.
.Syncthing
an open-source file synchronization client/server application

Go的开源框架
.Beego / gin /goframe
high-performance web framework in Go, used for web apps and backend services.[citation needed]
.Martini
package for web applications/services.[citation needed]
.Gorilla
a web toolkit for Go.[citation needed]
.Enduro/X ASG
a cluster middleware, application server, distributed transaction and multi-processing framework for Go.
.AeroFS
private cloud filesync appliance provider which migrated some microservices from Java to Go with major memory footprint improvements
.Chango
a programmatic advertising company uses Go in its real-time bidding systems.