# Go 简介
* * * * *
--: 作者:Mick
时间:2018年8月21日
* * * * *
### 能干啥
Go语言是非常有潜力的语言,是因为它的应用场景是目前互联网非常热门的几个领域 :
1. 区块链开发
2. 大型游戏服务端开发
3. 分布式/云计算开发 目前国外很多云平台在采用Go开发CloudFoundy
4. 服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等
5. 分布式系统,数据库代理器等
6. 网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用
7. 数据库(分布式或缓存)
8. 微服务
### 优秀开源项目
1. 容器(及相关):runc, docker, coreos, codetainer, kitematic
2. 服务自理管理平台: Kubernates
3. 微服务(含自动化部署/服务发现/调度器/etc):flynn, tsuru, deis, otto, terraform, consul, skydock, nomad, kubernetes
4. 数据库(及相关): tiDB、etcd (键值), boltdb (键值/事务), cayley(图),prometheus/seriesly (时间序列), cockroachdb, TiDB, influxdb, goleveldb,vitess, reborndb, pgweb, beedb
5. 其他:skydns, gryffin (Web安全), bosun (监控)
### 优秀框架
1. beego:web框架-》ThinkPHP
2. revel:强大的web框架-》Laravel
3. gwk(GO Web Server Kit)是GO语言的Web Server开发框架,简单易用,扩展性好,而且兼容Go App Engine
### Go 的诞生
**谷歌工程师的20%时间**
谷歌的“20%时间”工作方式,允许工程师拿出20%的时间来研究自己喜欢的项目。
1. 语音服务Google Now
2. 谷歌新闻Google News
3. 谷歌地图Google Map上的交通信息
4. Go语言
**诞生时间 **
Go 语言起源 2007 年,并于 2009 年正式对外发布。它从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关员工利用 20% 的空余时间来参与 Go 语言的研发工作
**开发作者 **
1. 肯尼斯·汤普逊(Ken Thompson) 是美国计算机科学学者和工程师。黑客文化圈子通常称他为“ken”[1]。在贝尔实验室工作期间,汤普逊设计和实现了Unix操作系统
2. 罗勃·派克(Rob Pike),来自加拿大的程序员,曾经加入贝尔实验室,为 UNIX小组的成员。曾经参与过贝尔实验室九号计划、Inferno,与编程语言 Limbo的开发。他与肯·汤普逊共同开发了UTF-8
3. 罗伯特(Robert Griesemer) Robert已经为Google的V8 JavaScript引擎和Chubby(Google的GFS分布式文件系统的分布式锁管理器)编写了代码。他还研究了特定领域语言SAWZALL、Java热点虚拟机和StrutTalk系统的设计和实现。他还为Cay-Y-MP编写了一个矢量化编译器,并为APL编写了一个解释器。
### Go 优势
![](https://box.kancloud.cn/b59c83ee7b25f616a755a441fe816ae9_428x365.jpeg)
1. 可直接编译成机器码,其性能与 Java 或 C++ 相似。在我们的使用中,Go 一般比 Python 要快 30 倍双击666
2. 静态类型语言即强类型必须有类型
3. 天生的支持高并发,我曾经说过一句话,天生的基因和整容是有区别的,大家一样美丽,但是你喜欢整容的还是天生基因的美丽呢?Go就是基因里面支持的并发,可以充分的利用多核,很容易的使用并发。
4. 内置runtime,支持垃圾回收,这属于动态语言的特性之一
5. 简单易学,语法简单明了
6. 内置强大的工具,gofmt,test,godoc,build,clean,doc,env
7. 内嵌C支持,前面说了作者是C的作者,所以Go里面也可以直接包含c代码,利用现有的丰富的C库。
### Go 缺点
1. Go的import包不支持版本,有时候升级容易导致项目不可运行,所以需要自己控制相应的版本信息
2. Go的goroutine一旦启动之后,不同的goroutine之间切换不是受程序控制,runtime调度的时候,需要严谨的逻辑,不然goroutine休眠,过一段时间逻辑结束了,突然冒出来又执行了,会导致逻辑出错等情况
3. GC延迟有点大,我开发的日志系统伤过一次,同时并发很大的情况下,处理很大的日志,GC没有那么快,内存回收不给力,后来经过profile程序改进之后得到了改善
4. pkg下面的图片处理库很多bug,还是使用成熟产品好,调用这些成熟库imagemagick的接口比较靠谱
### 中国Go语言布道者-许式伟
在 QCon 2015 上海站上,许式伟曾经做过《Go 语言发展状况》的主题分享。对于 Go 语言,他提到过三个预测:
第一个预测,我最早在 2012 年新浪微博里提过,Go 语言 10 年内一定会超过 C 和 Java,变成排行榜第一的语言。今天大家可能会略相信,但在 2012 年的时候没有多少人会相信,即使今天讲出来,绝大部分人都会觉得太早,毕竟它还没有排进前五。
第二个预测,Go 语言将在两年内制霸云计算领域。
第三个预测,Go 将统治下一个 10 年。(来自于 Deferpanic 创始人 Lan Eyberg)。