What?Go语言是什么?
go语言是谷歌2009发布的第二款开源编程语言。专门针对多处理器系统应用程序的编程进行优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全,支持并发进程。同样该语言是一个开源的编程语言,让构造简单,可靠且高效的软件变得容易。go语言支持面向对象,而且具有真正的闭包和反射等功能。
Why?Go语言为什么出现?
谷歌内部代码越来越多,越来越复杂,再加上内部多语言的交互和多程序员,分布式的编译系统和数百万的服务器。
造成了如下痛点:编译慢,失控的依赖,每个工程师只是用了一个语言里面的一部分,程序难以维护(可读性查,文档不清晰等),更新的花费越来越长,交叉编译困难。
解决的问题:消除各种缓慢和笨重,改进各种低效和扩展性。用于解决工程上的问题,使编译变得更舒适和方便。
Who?谁创建的?
Robert Griesemer, Rob Pike 和 Ken Thompson
When?什么时候?
2007年开始开发,2009年谷歌进行开源。
Where?哪里?
现常用在什么系统中:
1.服务器编程:处理日志,数据打包,虚拟机处理,文件系统等。
2.分布式系统,数据库代理器:如ETCD
3.数据库: Groupcache,Couchbase部分组件。
4.云平台。
优点:
1.学习曲线,容易上手。
2.效率高。
3.出身名门,血统纯正。
4.自由高效:组合思想,无侵入式的接口。
特性:静态语言,天生并发,内置GC,安全性高,语法简单,交叉编译和编译快速。(具有运行快,开发快和部署快的特性。)
5.强大标准库:互联网应用,系统编程和网络编程。
6.部署方便:二进制文件,Copy部署。
7.简单的并发。
8.稳定性。提供软件生命周期(开发,测试,部署,维护等)
Go语言成功项目:
1.nsq:https://nsq.io/
A realtime distributed messaging platform:一个开源的消息队列系统,性能非常高。
2.docker: https://www.docker.com/ http://www.docker.org.cn/
Futrue proof your windows apps and drive continuous innovation 虚拟机打包工具,可以实现PAAS平台的组件。
3.packer: https://www.packer.io/
Build Automated Machine Images 用来生成不同平台的镜像文件
4. skynet http://www.skynet.com.my/
Is the best way to protect you shipment against the lost or damage. 分布式调度框架。
5.doozer https://www.merriam-webster.com/dictionary/doozer
分布式同步工具
6.Heka https://hekad.readthedocs.io/en/v0.10.0/
Heka is an open source stream processing software system developed by Mozilla. Heka is a “Swiss Army Knife” type tool for data processing, useful for a wide variety of different tasks。 mazila开源的日志处理系统。
7.tsuru https://tsuru.io/
Tsuru is an extensible and open source Platform as a Service software. 开源的平台即服务的PAAS平台。
8.groupcache:用于google下载系统的缓存系统。
9.god:类似redis的缓存系统,但是支持分布式和扩展性。
10.gor:网络流量抓包和重放工具。
缺点:
1.不支持版本。
2.go的goroutine一旦启动后,不同版本之间切换不收程序控制,runtime调度的时候,需要严谨的逻辑,不然会出现休眠一段时间后,结束突然再冒出来执,会导致逻辑出错等情况。
3.GC延迟大,大并发下,处理大日志,GC没有那么快。
4.pkg下面的图片处理库很多bug,使用成熟产品和成熟库接口比较靠谱。 从选择golang角度上来,选择可以很轻松的兼顾运行性能,开发效率和维护难度。
参考文献:
go语言:
https://baike.baidu.com/item/Go%E8%AF%AD%E8%A8%80/3246011?fr=aladdin
go语言教程:
http://www.runoob.com/go/go-tutorial.html
我为什么选择使用go语言:
https://blog.csdn.net/csdn265/article/details/53312313
为什么要使用go语言?go语言的优势在哪里?
https://www.zhihu.com/question/21409296?sort=created
最后来张美图看看。