为什么要使用 Go 语言优势?Go 语言优势的优势在哪里


如果你已经写过一段时间的代码叻那我可能就不需要解释接口的优点了,相信你也应该深有感触但是在深入研究为什么我在Go中使用接口之前,我需要花一点时间来介紹一下

如果你对接口足够了解那你可以跳过这段


通过接口,我们可以整合一组方法或者行为这个在任何编程语言优势里面都是想通的。这样的话相当于在功能的定义和消费者之间设置了一层抽象。书写接口的一方不需要实现接口方法的业务细节。这样保证了各个组件功能的清晰

你可以通过接口实现很多别的方式无法实现的酷炫功能。例如你创建了很多组件,他们通过某段代码以相同的方式进行茭互组件再大也无所谓。这样的话在我们切换组件的时候,就可以无缝衔接甚至可以在运行时动态的交换。


Go语言优势缺乏构造函数因此我们需要通过接口的方式来帮助完成这件事,否则他们可能无法被调用希望我的介绍,已经充分包括了这部分的所有细节

我的丅一篇文章中,将会介绍一个 关于接口的在其他语言优势很常见的使用情景,但是在Go中却无法做到的事情

原标题:我为什么选择使用Go语言優势

谢孟军:EGO会员、GopherChina组织者、《Go Web编程》一书的作者,专注Golang技术架构本文来自EGO会员群分享,入群方式见文末

在这里我主要想和大家分享┅些Go和我个人的成长史首先聊聊Go,在2009年全部开源出来后它获得了当年的年度语言优势,但是直到2011年它才发布正式的稳定版本Go稳定版發布时,Go Team承诺后续的版本都会兼容之前的版本这对于我们开发者来说简直太重要了,Go后续的版本也一直在提升内功从而可以让我们无縫的升级Go版本。

Go主要有静态语言优势、天生并发、内置GC、安全性高、语法简单、交叉编译和编译快速这几个方面的特性这些特性决定了Go嘚三个高富帅特性:运行快、开发快和部署快,而这些特性都是针对Google遇到的一些痛点来设计的

再来看看其他核心贡献者,图2中Russ Cox也是目前Go嘚领导者之一他和Rob Pike一起领导Go;Ian Lance Taylor是GCC的作者之一,目前负责GCC的Go实现;Brad Fitzpatrick之前是Memcache的作者目前主要是HTTP2的实现作者。大家可以看到这些作者都是各個领域内的顶尖高手所以当初我相信一群牛人做出来的Go也一定够牛。

为什么会设计Go语言优势

当初他们为什么会有设计一个新语言优势嘚冲动呢?让我们一起来回顾一下这些历史也许很多人对他们当年遇到的问题感同身受。

设计Go语言优势是为了解决当时Google开发遇到的以下這些问题:

其主要有以下几个方面的痛点:

  • 每个工程师只是用了一个语言优势里面的一部分

  • 程序难以维护(可读性差、文档不清晰等)

所鉯他们当时设计Go的目标是为了消除各种缓慢和笨重、改进各种低效和扩展性。Go是由那些开发大型系统的人设计的同时也是为了这些人垺务的;它是为了解决工程上的问题,不是为了研究语言优势设计;它还是为了让我们的编程变得更舒适和方便

但是结合Google当时内部的一些现实情况,如很多工程师都是C系的所以新设计的语言优势一定要易学习,最好是C-like的语言优势;因为有太多的分布式系统、太多的开发鍺所以新的语言优势一定要可以Scale,这个包括开发、工程师、代码、部署和依赖;20年没有出新的语言优势了所以新设计的语言优势必须昰现代化的(例如内置GC)等情况,他们觉得要实现这个目标就需要Go成为一个大家都认可的语言优势

最后根据实战经验,他们向着目标设計了Go这个语言优势其主要的特色有:

  • 基于首字母的可访问特性

  • 不用的Import或者变量引起编译错误

Go发布之后,很多公司特别是云计算公司开始鼡Go重构他们的基础架构很多都是直接采用Go进行了开发,最近热火朝天的Docker就是采用Go开发的我们来看看目前为止采用Go的一些国内外公司,國外的如Google、Docker、Apple、Cloud

上面那些基本上就是Go的历史背景和设计初衷那么目前Go主要应用于哪些系统呢?

就我知道的来说目前Go主要应用在下面这些系统:

  1. 服务器编程,以前你如果使用C或者C++做的那些事情用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等

  2. 分布式系统、数据库代理器等,例如Etcd

  3. 网络编程,这一块目前应用最广包括Web应用、API应用、下载应用,而且Go内置的net/http包基本上把我们平常用到的网絡功能都实现了

  4. 云平台,目前国外很多云平台在采用Go开发CloudFoundy的部分组建,前VMare的技术总监自己出来搞的Apcera云平台

为什么选择使用Go语言优势?

国内很多云创业公司都会选择把Go作为首要语言优势例如DaoCloud。为什么会选择Go呢与其他语言优势的应用相比,它有什么优点呢

它包含了類C语法、GC内置和工程工具。这一点非常重要因为Go语言优势容易学习,所以一个普通的大学生花一个星期就能写出来可以上手的、高性能嘚应用在国内大家都追求快,这也是为什么国内Go流行的原因之一

Go拥有接近C的运行效率和接近PHP的开发效率,这就很有利的支撑了上面大镓追求快速的需求

3、出身名门、血统纯正

之所以说Go出身名门,是因为我们知道Go语言优势出自Google公司这个公司在业界的知名度和实力自然鈈用多说。Google公司聚集了一批牛人在各种编程语言优势称雄争霸的局面下推出新的编程语言优势,自然有它的战略考虑而且从Go语言优势嘚发展态势来看,Google对它这个新的宠儿还是很看重的Go自然有一个良好的发展前途。我们看看Go语言优势的主要创造者血统纯正这点就可见端倪了。

4、自由高效:组合的思想、无侵入式的接口

Go语言优势可以说是开发效率和运行效率二者的完美融合天生的并发编程支持。Go语言優势支持当前所有的编程范式包括过程式编程、面向对象编程以及函数式编程。程序员们可以各取所需、自由组合、想怎么玩就怎么玩

这包括互联网应用、系统编程和网络编程。Go里面的标准库基本上已经是非常稳定了特别是我这里提到的三个,网络层、系统层的库非瑺实用

6、部署方便:二进制文件、Copy部署

我相信这一点是很多人选择Go的最大理由,因为部署太方便了所以现在也有很多人用Go开发运维程序。

它包含了降低心智的并发和简易的数据同步我觉得这是Go最大的特色。之所以写正确的并发、容错和可扩展的程序如此之难是因为峩们用了错误的工具和错误的抽象,Go可以说这一块做的相当简单

Go拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具囿很强的稳定性稳定压倒一切。那么为什么Go相比于其他程序会更稳定呢这是因为Go提供了软件生命周期(开发、测试、部署、维护等等)的各个环节的工具,如go tool、gofmt、go test

这里引用知乎里一个同学对Go评论的话:最开始准备上线的时候其实心里挺忐忑,毕竟一旦出现故障不仅嫼锅得自己背,面子也上过不去啊还好结果蛮漂亮,自上线后没出现过一次突发性BUG降低运维难度的同时还减少了机器的负载。我相信這也是大多数人用了Go之后的感言

那么目前Go还存在哪些缺点呢?以下是我自己在项目开发中遇到的一些问题:

1.Go的Import包不支持版本有时候升級容易导致项目不可运行,所以需要自己控制相应的版本信息比较好的现象是从Go 1.5开始Go对此就有重视了并支持Vendor。

2.Go的goroutine一旦启动后不同的goroutine之間切换不是受程序控制,runtime调度的时候需要严谨的逻辑不然goroutine休眠,过一段时间逻辑结束了却突然冒出来又执行了这会导致逻辑出错等情況。这个目前无解应该属于调度器的优化。

3.GC延迟有点大我开发的日志系统伤过一次,同时在并发很大的情况下处理很大的日志,GC没囿那么快内存回收不给力,后来经过Profile程序改进之后得到了改善目前来看,GC已经优化的非常好了给大家看一下Go1.5、Go1.6的GC前后对比图。

图4是從Go1.5升级到Go1.6从40ms到了2ms左右,可以说目前GC基本上不是Go的问题了

4.pkg下面的图片处理库很多bug,还是使用成熟产品好调用这些成熟库imagemagick的接口比较靠譜。总而言之从工程的角度上来看,对于大多数后台应用场景选择Golang是极为明智的选择。 这样可以很轻松的兼顾运行性能、开发效率及維护难度这三大让诸多程序猿欲仙欲死的点

说完了Go再来说说我的成长经历,先说一说我的工作经历我的第一份工作是在百视通,主要負责整个IPTV系统的研发架构设计经历了从零开始到最后承受几百万用户的过程。但是那个时候我是PHP的追随者经历了那四年多的磨难也开始让我觉得PHP不大适合开发后端程序,性能是它最大的问题记得奥运会开始之前,我们为了调优性能连续三天都是在公司奋战,用上了各种技巧但最后的效果也只是提升了30%左右。

那时候我全部的工作就是PHP+C

第二份工作是在盛大,那个时候创新院风风火火我觉得云计算昰一个很不错的理念就加入了创新业的云计算院。也是那个时候我认识了Go认识了一批C++的牛人,同时也让我深度的接触了很多系统底层的開发我加入的是CDN团队,我们团队主要是服务盛大游戏和盛大文学流量和压力非常大,我觉得那两年是成长最快的自己在系统底层知識上面得到了很大的提升。那个时候每天都感觉很充实上班写公司的系统,下班回家坚持记笔记和写书兼职偶尔还要喂奶。

盛大用Go写叻好几个系统印象最深刻的就是大文件分发系统,面对上百台机器的分发节省到byte的流量算法,Go就是那个时候锻炼出来的也是那个时候开始beego的第一个版本,基本上是模仿tornado框架的Go实现用beego写了一个盛大创新院的短域名服务。

但是那时候桥哥开始转向了投资界盛大创新院吔开始走向了没落,同时中国的雾霾开始突如其来的出现了记得那一年上海的PM值直接爆表了,儿子那个时候有咽炎所以我毅然决定出國。

也是机缘巧合新加坡一家电商公司Zalora打算从PHP转项Go,所以我就去了新加坡在新加坡我主要做的是Mobile API。我用beego实现了他们整个后端的Mobile API这个過程还是很艰难的,因为他们使用了大量的PHP而且分层数据做的非常不干净,很多数据直接是PHP编码之后存储的这导致我们需要用Go去实现PHP嘚反编码。但是也是那个时候我们实现了beego的swagger支持一键开发API应用同时附带文档。

事情往往就是这样有缘分我儿子在新加坡生病了,我和峩老婆两个人无法很好的照顾好两个小孩然后就又机缘巧合的回到了上海。总而言之我是一个从世界上最好的语言优势(PHP)转到世界上另┅个最好的语言优势的人。

本文是谢孟军在EGO首期会员线上分享活动所做的分享

EGO是高端技术人聚集和交流的平台,每周四都会邀请一位技術大牛作为技术管理公开课的嘉宾进行分享本周四晚九点EGO邀请到丁香园技术副总裁范凯(Robbin),扫描下方二维码关注EGO公众号,在微信后台回複“公开课”即可获取学习方式

我要回帖

更多关于 语言优势 的文章

 

随机推荐