一、简介
1、golang是Google公司2009年11月正式对外公开的一门编程语言
2、golang是静态强类型语言,是区别于解析型语言的编译型语言
3、静态:类型固定,强类型:不同类型不允许直接运算
4、解析型语言:源代码是先翻译为中间代码,然后由解析器对代码进行解释执行
5、编译型语言——源代码编译生成机器语言,然后由机器直接执行机器码即可执行
二、特性
1、跨平台的编译型语言
2、语法接近C语言
3、管道、切片、并发
4、垃圾回收的机制
5、支持面向对象和面向过程的编程模式
三、发展历史
1、2009年11月7日 weekly.2009-11-06:早期的版本
2、2012年3月28日 go1:稳定版版的发布
3、2013年5月14日 go1.1:语言本身的变化、库的变化等
4、2013年12月01日 go1.2:提供更好的调度和一个新的语言特性
5、2014年6月18日 go1.3:主要是在实现的工作上的变化,以及精准的垃圾回收
6、2014年12月10日 go1.4:包含了2个很小的语言变更
7、2015年8月19日 go1.5:实现的架构变化,同时保留了和旧版本的兼容性,本次更新中移除了"最后残余的C代码"
8、2016年2月7日 go1.6:语言本身、运行时、和库的实现的变化
9、2016年8月15日 go1.7:标准库有显着的性能改进和变化
10、2017年2月26日 go1.8:标准库有显着的性能改进和变化
11、2017年8月24日 go1.9:是包含语言,标准库,以及运行时的诸多变化。这个版本中的大部分工作都是对运行时和工具的改进
12、2018年2月16日 go1.10:大部分更改都在工具链,运行时和库的实现中
13、2018年8月24日 go1.11:modules和WebAssembly支持
14、2019 年 2 月 go 1.12:基于 analysi包重写了 go vet`命令,为开发者写自己的检查器提供了更大的灵活性
15、2019 年 9 月 go 1.13:改进了 sync 包中的 Pool,在 gc 运行时不会清除 pool。它引进了一个缓存来清理两次 gc 运行时都没有被引用的 pool 中的实例。重写了逃逸分析,减少了 Go 程序中堆上的内存申请的空间
16、2020 年 2 月 go 1.14:现在 Go Module 已经可以用于生产环境,鼓励所有用户迁移到 Module。该版本支持嵌入具有重叠方法集的接口。性能方面做了较大的改进,包括:进一步提升 defer 性能、页分配器更高效,同时 timer 也更高效。现在,Goroutine 支持异步抢占
四、应用领域:服务端开发,分布式系统,微服务,网络编程,区块链开发,内存kv数据库,例如boltDB,levelDB,云平台
五、应用实例
2、Facebook:Facebook也在用,为此他们还专门在Github上建立了一个开源组织facebookgo,大家可以通过https://github.com/facebookgo访问查看facebook开源的项目,比如著名的是平滑升级的grace
3、腾讯:腾讯作为国内的大公司,还是敢于尝试的,尤其是Docker容器化这一块,他们在15年已经做了docker万台规模的实践,具体可以参考http://www.infoq.com/cn/articles/tencent-millions-scale-docker-application-practice,golang主要用于腾讯游戏蓝鲸平台后台开发工作,容器相关的开发工作,和蓝鲸平台,容器开发有关。腾讯作为主要使用C/C++的公司,使用Go会方便很多,也有很多优势,不过日积月累的C/C++代码很难改造,也不敢动,所以新业务会在Go方面尝试
5、京东:京东云消息推送系统、云存储,以及京东商城等都有使用Go做开发
8、美团、滴滴、新浪以及七牛等。一般的选择,都是选择用于自己公司合适的产品系统来做,比如消息推送的、监控的、容器的等,golang特别适合做网络并发的服务,这是他的强项,所以也是被优先用于这些项目
六、项目实例
1、docker:基于lxc的一个虚拟打包工具,能够实现PAAS平台的组建
2、kubernetes :Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡
3、区块链:BTCD是用golang实现的完整节点的比特币实现
4、nsq:bitly开源的消息队列系统,性能非常高,目前他们每天处理数十亿条的消息
5、packer:用来生成不同平台的镜像文件,例如VM、vbox、AWS等,作者是vagrant的作者
6、skynet:分布式调度框架
7、Doozer:分布式同步工具,类似ZooKeeper
8、Heka:mazila开源的日志处理系统
9、cbfs:couchbase开源的分布式文件系统
10、tsuru:开源的PAAS平台,和SAE实现的功能一模一样
11、groupcache:memcahe作者写的用于Google下载系统的缓存系统
12、god:类似redis的缓存系统,但是支持分布式和扩展性
13、gor:网络流量抓包和重放工具
七、项目架构:GOPATH的工作区包含bin,src,和pkg这三个目录
1、src:源码(包含第三方的和自己项目的)
2、bin:编译生成的可执行程序
3、pkg:编译时生成的对象文件
八、前瞻:目前golang已经⼴泛应用于人工智能、云计算开发、容器虚拟化、⼤数据开发、数据分析及科学计算、运维开发、爬虫开发、游戏开发等领域,golang语言简单易学,天生支持并发,完美契合当下高并发的互联网生态
posted @
2020-09-09 21:17
专业搬砖人士
阅读(
285)
评论()
收藏
举报