摘要:一、我们为什么选择Go语言选择Go语言的原因可能会有很多,关于Go语言的特性、优势等,我们在之前的文档中也已经介绍了很多了。但是最主要的原因,应该是基于以下两方,深入知道公司转给Go语言开发的趋势和优势 公司转公司多久能到账

一、大家何故选择Go语言</p>n<p>选择Go语言的缘故也许会有很多,关于Go语言的特性、优势等,大家在之前的文档中也已经说明了很多了。然而最主要的缘故,应该是基于下面内容两方面的思考:</p>n<p>执行性能</p>n<p>缩短API的响应时长,化解批量请求访问超时的难题。在Uwork的业务场景下,一次API批量请求,往往会涉及对另外接口服务的多次调用,而在之前的PHP实现玩法下,要做到并行调用是特别困难的,串行处理却不能从根本上进步处理智能。而GO语言不一样,通过协程可以方便的实现API的并行处理,达到处理效率的最大化。 依赖Golang的高性能HTTP Server,提高体系吞吐能力,由PHP的数百级别提高到数千里甚至过万级别。</p>n<p>开发效率</p>n<p>GO语言运用起来简单、代码描述效率高、编码规范统一、上手快。 通过少量的代码,即可实现框架的标准化,并以统一的规范快速构建API业务逻辑。 能快速的构建各种通用组件和公共类库,进一步提高开发效率,实现特定场景下的功能量产。</p>n<p>二、Go语言能做啥子</p>n<p>Go 语言从公开 1.0 版本以来备受众多开发者关注并得到广泛运用,Go 语言的简单、高效、并发特性吸引了众多传统语言开发者的加入,而且人数越来越多。</p>n<p>鉴于Go语言的特征和设计的初衷,Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件体系、分布式体系、数据库代理等;网络编程方面,Go语言广泛应用于Web 应用、API应用、下载应用等;除此之外,Go语言还适用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发。</p>n<p>服务器编程,以前你如果运用C或者C++做的那些事务,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件体系等。</p>n<p>分布式体系、数据库代理器、中间件等,例如Etcd。</p>n<p>网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用,而且Go内置的net/http包基本上把大家平常用到的网络功能都实现了。</p>n<p>数据库操作</p>n<p>开发云平台,目前国外很多云平台在采用Go开发</p>n<p>三、国内外有哪些企业或项目运用Go语言</p>n<p>Go公开之后,很多企业特别是云计算企业开始用Go重构他们的基础架构,很多都是直接采用Go进行了开发,最近热火朝天的Docker就是采用Go开发的。</p>n<p>运用 Go 语言开发的开源项目特别多。早期的 Go 语言开源项目只是通过 Go 语言和传统项目进行C语言库绑定实现,例如 Qt、Sqlite 等;后期的很多项目都运用 Go 语言进行从头原生实现,这个经过相对于其他语言要简单一些,这也促成了大量运用 Go 语言原生开发项目的出现。</p>n<p>云计算基础设施领域</p>n<p>代表项目:docker、kubernetes、etcd、consul、cloudflare CDN、七牛云存储等。</p>n<p>基础软件</p>n<p>代表项目:tidb、influxdb、cockroachdb等。</p>n<p>微服务</p>n<p>代表项目:go-kit、micro、monzo bank的typhon、bilibili等。</p>n<p>互联网基础设施</p>n<p>代表项目:以太坊、hyperledger等。</p>n<p>采用Go的一些国外企业,如Google、Docker、Apple、Cloud Foundry、CloudFlare、Couchbase、CoreOS、Dropbox、MongoDB、AWS等企业;</p>n<p>采用Go开发的国内企业:如阿里云CDN、度娘、小米、七牛、PingCAP、华为、金山软件、猎豹移动、饿了么等企业。</p>n<p>Docker</p>n<p>Docker 是一种操作体系层面的虚拟化技术,可以在操作体系和应用程序之间进行隔离,也可以称之为容器。Docker 可以在一台物理服务器上快速运行壹个或多个实例。基于lxc的壹个虚拟打包工具,能够实现PAAS平台的组建。例如,启动壹个 CentOS 操作体系,并在其内部命令行执行指令后结束,整个经过就像自己在操作体系一样高效。</p>n<p>项目链接:</p>n<p>https://github.com/docker/docker</p>n<p>go语言</p>n<p>Go 语言自己的早期源码运用C语言和汇编语言写成。从 Go 1.5 版本后,完全运用 Go 语言自身进行编写。Go 语言的源码对了解 Go 语言的底层调度有极大的参考意义,提议希望对 Go 语言有深入了解的读者读一读。</p>n<p>项目链接:</p>n<p>https://github.com/golang/go</p>n<p>Kubernetes</p>n<p>Google 企业开发的构建于 Docker 之上的容器调度服务,用户可以通过 Kubernetes 集群进行云端容器集群管理。</p>n<p>项目链接:</p>n<p>https://github.com/kubernetes/kubernetes</p>n<p>etcd</p>n<p>一款分布式、可靠的 KV 存储体系,可以快速进行云配置。</p>n<p>项目链接:</p>n<p>https://github.com/coreos/etcd</p>n<p>beego</p>n<p>beego 一个类似 Python的 Tornado 框架,采用了 RESTFul 的设计思路,运用 Go 语言编写的壹个极轻量级、高可伸缩性和高性能的 Web 应用框架。</p>n<p>项目链接:</p>n<p>https://github.com/astaxie/beego</p>n<p>martini</p>n<p>一款快速构建模块化的 Web 应用的 Web 框架。</p>n<p>项目链接:</p>n<p>https://github.com/go-martini/martini</p>n<p>codis</p>n<p>国内的杰出分布式 Redis 化解方法。</p>n<p>项目链接:</p>n<p>https://github.com/CodisLabs/codis</p>n<p>delve</p>n<p>Go语言</p>n<p>强大的调试器,被很多集成环境和编辑器整合。</p>n<p>项目链接:</p>n<p>https://github.com/derekparker/delve</p>n<p>Facebook</p>n<p>Facebook也在用,为此他们还专门在Github上建立了壹个开源组织facebookgo,大家可以通过https://github.com/facebookgo访问查看facebook开源的项目,比如著名的是平滑更新的grace。</p>n<p>Uber</p>n<p>企鹅</p>n<p>企鹅作为国内的大企业,还是敢于尝试的,尤其是Docker容器化这一块,他们在15年已经做了docker万台规模的操作,具体可以参考http://www.infoq.com/cn/articles/tencent-millions-scale-docker-application-practice 。</p>n<p>度娘</p>n<p>其次就是度娘的消息体系。负责企业手百消息通讯体系服务器端开发及维护。</p>n<p>京东</p>n<p>京东云消息推送体系、云存储,以及京东商城等都有运用Go做开发。</p>n<p>小米</p>n<p>小米对Golang的支持,莫过于运维监控体系的开源,也就是 http://open-falcon.com/ 。</p>n<p>除了这些之后,小米互娱、小米商城、小米视频、小米生态链等团队都在运用Golang。</p>n<p>360对Golang的运用也不少,壹个是开源的日志搜索体系Poseidon,托管在Github上,https://github.com/Qihoo360/poseidon.</p>n<p>还有360的推送团队也在运用,他们还写了篇博文在Golang的官方博客上 https://blog.golang.org/qihoo。</p>n<p>七牛云</p>n<p>七牛云用了近50万行代码,来实现整个产品。七牛云存储产品网址:http://qiniu.com/。上线时刻:2011-9-1。应用范围:整个产品(包括基础服务、Web端、统计平台、各类小工具等等)Go代码行数占比:99.9%日 PV:保密</p>n<p>美团</p>n<p>美团后台流量支撑程序。应用范围:支撑主站后台流量(排序,主推,搜索等),提供负载均衡,cache,容错,按条件分流,统计运行指标(qps,latency)等功能。</p>n<p>滴滴</p>n<p>基础服务平台。</p>n<p>###金山微看</p>n<p>应用范围:服务接口,后台流程服务,消息体系,图片体系</p>n<p>搜狗</p>n<p>搜狗推送体系。Push体系中用于维持和客户端连接的部分。</p>n<p>QOR - 模块化的电商体系</p>n<p>QOR官网: QOR: E-commerce & CMS SDK written in Go</p>n<p>github地址: qor/qor · GitHub</p>n<p>应用范围: 整个产品</p>n<p style=\"text-align:center;\"></p>n<p>weico</p>n<p>产品名:weico 3.0, 服务端全部代码都是用Go实现。</p>n<p>仙侠道</p>n<p>产品网址:仙侠道官网 - 心动游戏</p>n<p>应用范围: 游戏服务端(通讯、逻辑、数据存储)</p>n<p>快玩游戏</p>n<p>网址:快玩小游戏,单机游戏,网页游戏,快玩游戏,快玩游戏盒</p>n<p>应用范围:实时消息体系、用户认证、用户会话、统一统计接口</p>n<p>盛大云CDN</p>n<p>网址:盛大云计算</p>n<p>应用范围:CDN的调度体系、分发体系、监控体系、短域名服务,CDN内部放开平台、运营报表体系以及其他一些小工具等</p>n<p>Bmob移动后端云服务平台</p>n<p>产品网址:Bmob移动后端云服务平台</p>n<p>应用范围:Restful API(运用Beego)、统计解析平台、常用服务如发邮件、队列异步处理、统计用户空间和接口请求</p>n<p>群策</p>n<p>网址:群策 - 统一团队沟通,高效完成职业</p>n<p>应用范围:全体系</p>n<p>BiddingX DSP广告投放体系</p>n<p>网址:BiddingX_专业的DSP化解方法供应商</p>n<p>应用范围:竞价投放、爆料统计、点击跳转</p>n<p>街坊四邻</p>n<p>网址:首页 - 街坊四邻</p>n<p>应用范围:后台服务</p>n<p>Leanote</p>n<p>网址:Leanote</p>n<p>Bearychat</p>n<p>网址:BearyChat</p>n<p>宅豆</p>n<p>网址:宅豆网 - 自筑最美家,宅豆随你搭</p>n<p>白板- 设计图讨论工具</p>n<p>网址:白板</p>n<p>实验楼</p>n<p>网址:实验楼 - 第一家以实验为核心的IT在线教学平台</p>n<p>新浪微博</p>n<p>中间件和弹性调度用 Java 和 Go 编写,微博视频转码及存储服务用 Go 编写。</p>n<p>爱奇艺</p>n<p>VR 后台体系中间件,VR 端的 HTTP 接口。</p>n<p>猎豹移动</p>n<p>消息推送</p>n<p>网易</p>n<p>网易蜂巢容器公有云。</p>n<p>哔哩哔哩</p>n<p>弹幕</p>n<p>巨人网络</p>n<p>部分年度手游的服务端。</p>n<p>今天头条</p>n<p>Nsq:Nsq 是由Go语言开发的高性能、高可用消息队列体系,性能特别高,每天能处理数十亿条的消息;</p>n<p>Skynet:分布式调度框架</p>n<p>Doozer:分布式同步工具,类似ZooKeeper</p>n<p>Heka:mazila开源的日志处理体系</p>n<p>Cbfs:couchbase开源的分布式文件体系</p>n<p>Tsuru:开源的PAAS平台,和SAE实现的功能一致无二</p>n<p>God:类似redis的缓存体系,然而支持分布式和扩展性</p>n<p>Gor:网络流量抓包和重放工具</p>n<p>还有很多,比如阿里中间件、聚美优品、高升控股、探探、斗鱼直播、人人车、亚信、Udesk、方付通、招财猫、三一集团、美餐网等。一般的选择,都是选择用于自己企业合适的产品体系来做,比如消息推送的、监控的、容器的等,Golang特别适合做网络并发的服务,这是他的强项,因此也是被优先用于这些项目。Go语言作为一门大型项目开发语言,在很多大企业相继运用,甚至完全转给Go开发。</p>n<p>四、写在最后</p>n<p>当然,壹个技术能不能进步起来,决定因素还要看三点。</p>n<p>有没有壹个相对好的社区。像 C、C++、Java、Python 和 JavaScript 的生态圈都是特别丰盛和火爆的。尤其是有很多商业机构参和的社区那就更为人气爆棚了,比如 Linux 的社区。</p>n<p>有没有壹个工业化的标准。像 C、C++、Java 都是有标准化组织的。尤其是 Java,其在架构上还搞出了像 J2EE 这样的企业级标准。</p>n<p>有没有壹个或多个杀手级应用。C、C++ 和 Java 的杀手级应用不用多说了,就算是对于 PHP 这样还不能算一个好的编程语言来说,由于是 Linux 时代的第壹个杀手级化解方法 LAMP 中的决定因素技术,因此,也进步起来了。</p>n<p>上述的这三点是特别决定因素的,新的技术只需要占到其中一到两点就已经很不错了,何况有的技术,比如 Java,是三点全占到了,因此,Java 的进步是如此好。当然,除了上面这三点重要的,还有一些其它的影响影响,比如:</p>n<p>进修曲线是否低,上手是否快。这点特别重要,C++ 在这点上越做越不好了。</p>n<p>有没有壹个不错的进步开发效率的开发框架。如:Java 的 Spring 框架,C++ 的 STL 等。</p>n<p>是否有壹个或多个巨型的技术企业作为后盾。如:Java 和 Linux 后面的 IBM、Sun……</p>n<p>有没有化解软件开发中的痛点。如:Java 化解了 C 和 C++ 的内存管理难题。</p>n<p>用这些标尺来量一下 Go 语言,大家可以清楚地看到:</p>n<p>Go 语言容易上手;</p>n<p>Go 语言化解了并发编程和写底层应用开发效率的痛点;</p>n<p>Go 语言有 Google 这个全球一流的技术企业在后面;</p>n<p>Go 语言的杀手级应用是 Docker,而 Docker 的生态圈在这几年完全爆棚了。</p>n<p>因此,Go 语言的未来是不可限量的。当然,我个人觉得,Go 也许会吞食很多 C、C++、Java 的项目。不过,Go 语言所吞食主要的项目应该是中间层的项目,既不是特别底层也不会是业务层。</p>n<p>也就是说,Go 语言不会吞食底层到 C 和 C++ 那个级别的,也不会吞食到高层如 Java 业务层的项目。Go 语言能吞食的一定是 PaaS 上的项目,比如一些消息缓存中间件、服务发现、服务代理、控制体系、Agent、日志收集等等,没有复杂的业务场景,也到不了特别底层(如操作体系)的中间平台层的软件项目或工具。而 C 和 C++ 会被打到更底层,Java 会被打到更上层的业务层。</p>n<p>好了,大家再用上面的标尺来量一下 Go 语言的杀手级应用 Docker,你会发现基本是一样的。</p>n<p>Docker 上手很容易。</p>n<p>Docker 化解了运维中的环境难题以及服务调度的痛点。</p>n<p>Docker 的生态圈中有大企业在后面助力。比如 Google。</p>n<p>Docker 产出了工业界标准 OCI。</p>n<p>Docker 的社区和生态圈已经出现像 Java 和 Linux 那样的态势。</p>n<p>……</p>n<p>因此,虽然几年前的 Docker ,当时的坑儿还很多,然而,相对于这些大的影响来说,那些小坑儿都不是难题。只是需要一些时刻,这些小坑儿在未来 5-10 年就可以完全被填平了。</p>n<p>同样,大家可以看到 Kubernetes 作为服务和容器调度的决定因素技术一定会是最后的赢家。</p>n<p>最后,我还要说一下,何故要早一点地进入这些新技术,而不是等待这些技术成熟了后再进入。缘故有这么多少。</p>n<p>技术的进步经过特别重要。由于你可以清楚地看到了这种新技术的生态圈进步经过。让大家收获最大的并不是这些技术本身,而一个技术的变迁和行业的进步。</p>n<p>从中,大家看到了特别具体的各种思潮和思路,这些物品比起 技术本身来说更有价格。由于,这不但让大家从头思索已经掌握的技术以及怎样更好地化解已有的难题,而且还让我看到了未来。不但有了技术优势,而且这些姿势还让大家的技术生涯多了很多的也许性。</p>n<p>这些决定因素新技术,可以让你拿到技术的先机。这些对壹个需要技术领导力的个人或企业来说都是特别重要的。</p>n<p>壹个企业或是个人能够占有技术先机,就会比其它企业或个人有更大的影响力。一旦未来行业需求引爆,那么这个企业或是个人的影响力就会形成壹个相对大的护城河,并可以快速地产生经济利益。</p>n<p>Go的应用范围一直在扩大,云计算,微服务,区块链,何处都有用Go写的重量级项目。docker/kubernetes生态圈,几百/千万行代码,基本统治了云原生应用市场。去年大热的区块链,以太坊的geth,比特币的btcd,闪电网络的lnd,都是Go语言开发。还是那句话,多看看各种语言的生态,或许都并没有你想象的那么不堪。。。Go语言设计上确实不够“先进”,但也是另一种“务实”。其实go不管在国内还是国外已经很受待见了,国外google用的很多,uber也在用,国内有著名的今天头条,每天千亿级的访问妥妥的。几许语言终其一生都没有这么大的应用场景。