Go 语言介绍
Go 即 Golang,是 Google 公司 2009 年 11 月正式对外公开的一门编程语言。
Go 是静态强类型语言,是区别于解析型语言的编译型语言。
解析型语言——源代码是先翻译为中间代码,然后由解析器对代码进行解释执行。
编译型语言——源代码编译生成机器语言,然后由机器直接执行机器码即可执行。
Go 语言特性
跨平台的编译型语言
语法接近 C 语言
管道(channel),切片(slice),并发(routine)
有垃圾回收的机制
支持面向对象和面向过程的编程模式
Go 语言发展(版本 / 特性)
2009 年 11 月 7 日 weekly.2009-11-06 —— 早期的版本
2012 年 3 月 28 日 go1 —— 稳定版版的发布
2013 年 5 月 14 日 go1.1 —— 语言本身的变化、库的变化等。
2013 年 12 月 01 日 go1.2 —— 提供更好的调度和一个新的语言特性。
2014 年 6 月 18 日 go1.3 —— 主要是在实现的工作上的变化,以及精准的垃圾回收。
2014 年 12 月 10 日 go1.4 —— 包含了 2 个很小的语言变更。
2015 年 8 月 19 日 go1.5 —— 实现的架构变化,同时保留了和旧版本的兼容性。
2016 年 2 月 7 日 go1.6 —— 语言本身、运行时、和库的实现的变化。
2016 年 8 月 15 日 go1.7 —— 标准库有显着的性能改进和变化。
2017 年 2 月 26 日 go1.8 —— 标准库有显着的性能改进和变化。
2017 年 8 月 24 日 go1.9 —— 是包含语言,标准库,以及运行时的诸多变化。这个版本中的大部分工作都是对运行时和工具的改进。
2018 年 2 月 16 日 go1.10 —— 大部分更改都在工具链,运行时和库的实现中。
2018 年 8 月 24 日 go1.11 —— modules 和 WebAssembly 支持。
Go 语言应用
谁在用
这个不用多做介绍,作为开发 Go 语言的公司,当仁不让。Google 基于 Go 有很多优秀的项目,比如:https://github.com/kubernetes/kubernetes ,大家也可以在 Github 上 https://github.com/google/ 查看更多 Google 的 Go 开源项目。
Facebook 也在用,为此他们还专门在 Github 上建立了一个开源组织 facebookgo,大家可以通过 https://github.com/facebookgo 访问查看 facebook 开源的项目,比如著名的是平滑升级的 grace。
腾讯
腾讯作为国内的大公司,还是敢于尝试的,尤其是 Docker 容器化这一块,他们在 15 年已经做了 docker 万台规模的实践,具体可以参考 http://www.infoq.com/cn/articles/tencent-millions-scale-docker-application-practice 。
主要职责是:
负责腾讯游戏蓝鲸平台后台开发工作
负责容器相关的开发工作
和蓝鲸平台,容器开发有关。腾讯作为主要使用 C/C++ 的公司,使用 Go 会方便很多,也有很多优势,不过日积月累的 C/C++ 代码很难改造,也不敢动,所以新业务会在 Go 方面尝试。
百度
目前所知的百度的使用是在运维这边,是百度运维的一个 BFE 项目,负责前端流量的接入。他们的负责人在 2016 年有分享,大家可以看下这个 http://www.infoq.com/cn/presentations/application-of-golang-in-baidu-frontend .
其次就是百度的消息系统,从其最近的 Golang 招聘介绍就可以看出来.
负责公司手百消息通讯系统服务器端开发及维护
京东
京东云消息推送系统、云存储,以及京东商城等都有使用 Go 做开发。
小米
小米对 Golang 的支持,莫过于运维监控系统的开源,也就是 http://open-falcon.com/ 。
此外,小米互娱、小米商城、小米视频、小米生态链等团队都在使用 Golang。
360
360 对 Golang 的使用也不少,一个是开源的日志搜索系统 Poseidon,托管在 Github 上,https://github.com/Qihoo360/poseidon.
还有 360 的推送团队也在使用,他们还写了篇博文在 Golang 的官方博客上 https://blog.golang.org/qihoo。
360 直播在招聘 Golang 开发工程师。
美团、滴滴、新浪以及七牛等。一般的选择,都是选择用于自己公司合适的产品系统来做,比如消息推送的、监控的、容器的等,Golang 特别适合做网络并发的服务,这是他的强项,所以也是被优先用于这些项目。
应用领域
服务开发、并发、分布式、微服务等方向
Go 语言项目
docker: 基于 lxc 的一个虚拟打包工具,能够实现 PAAS 平台的组建。
kubernetes :Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡
区块链:BTCD 是用 go 语言实现的完整节点的比特币实现
nsq:bitly 开源的消息队列系统,性能非常高,目前他们每天处理数十亿条的消息
packer: 用来生成不同平台的镜像文件,例如 VM、vbox、AWS 等,作者是 vagrant 的作者
skynet:分布式调度框架
Doozer:分布式同步工具,类似 ZooKeeper
Heka:mazila 开源的日志处理系统
cbfs:couchbase 开源的分布式文件系统
tsuru:开源的 PAAS 平台,和 SAE 实现的功能一模一样
groupcache:memcahe 作者写的用于 Google 下载系统的缓存系统
god:类似 redis 的缓存系统,但是支持分布式和扩展性
gor:网络流量抓包和重放工具
Go 语架构
GOPATH 的工作区包含 bin,src,和 pkg 这三个:
src——源码(包含第三方的和自己项目的)
bin——编译生成的可执行程序
pkg——编译时生成的对象文件
Go 语言发展前景
Go 语言将登上语言榜前列,与 C 和 Java 并列前三甲
Go 语言称霸云计算
Go 将统治下一个 10 年