GO语⾔发展历程以及优势,前景浅谈.
背景介绍:
为什么要开发go语⾔呢?
Go语⾔官⽅⾃称,之所以开发go语⾔,是因为”近10年来的开发程序之难让我们有点沮丧”.
Go语⾔是推出的⼀种全新的编程语⾔,可以在不损失应⽤程序性能的情况下降低代码的复杂性。⾕歌⾸席派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令⼈沮丧。派克表⽰,和今天的C++或C⼀样,Go是⼀种系统语⾔。他解释道,“使⽤它可以进⾏快速开发,同时它还是⼀个真正的编译语⾔,我们之所以现在将其开源,原因是我们认为它已经⾮常有⽤和强⼤。”
2007年,⾕歌把Go作为⼀个20%项⽬开始研发,即让员⼯抽出本职⼯作之外时间的20%,投⼊在该项⽬上。除了派克外,该项⽬的成员还有其他⾕歌⼯程师也参与研发。
派克表⽰,编译后Go代码的运⾏速度与C语⾔⾮常接近,⽽且编译速度⾮常快,就像在使⽤⼀个交互式语⾔。现有编程语⾔均未专门对进⾏优化。Go就是⼯程师为这类程序编写的⼀种语⾔。它不是针对编程初学者设计的,但学习使⽤它也不是⾮常困难。Go⽀持,⽽且具有真正的闭包(closures)和反射 (reflection)等功能。
在的所有⽹络应⽤中,均没有使⽤Go,但是⾕歌已经使⽤该语⾔开发了⼏个内部项⽬。派克表⽰,Go是否会对⾕歌即将推出的Chrome OS产⽣影响,还⾔之尚早,不过Go的确可以和Native Client配合使⽤。他表⽰“Go可以让应⽤完美的运⾏在浏览器内。”例如,使⽤Go可以更⾼效的实现Wave,⽆论是在前端还是后台。
Go 同时具有两种,⼀种是建⽴在GCC基础上的Gccgo,另外⼀种是分别针对64位x64和32位x86计算机的⼀套编译器(6g和8g)。⾕歌⽬前正在研发其对ARM芯⽚和Android设备的⽀持。派克表⽰,“Android⼿机存在的问题是,我们⼀直没有⼀个数学协处理器。”
闭包:  就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的⼦函数才能读取,所以闭包可以理解成“定义在⼀个内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁
反射:
讲反射时必须先了解JVM,
例:Object o=new Object();运⾏起来:
⾸先JVM会启动,你的代码会编译成⼀个.class⽂件,然后被类加载器加载进jvm的内存中,你的类Obj
ect加载到⽅法区中,创建了Object类的class对象到堆中,注意这个不是new出来的对象,⽽是类的类型对象,每个类只有⼀个class对象,作为⽅法区类的数据结构的接
⼝。jvm创建对象前,会先检查类是否加载,寻类对应的class对象,若加载好,则为你的对象分配内存,初始化也就是代码:new
Object()。题主想想上⾯的程序对象是⾃⼰new的,程序相当于写死了给jvm去跑
反射是什么呢?
对于任意⼀个类,都能够知道这个类的所有属性和⽅法;对于任意⼀个对象,都能够调⽤它的任意⽅法和属性;这种动态获取信息以及动态调⽤对象⽅法的功能称为java语⾔的反射机制.
当我们的程序在运⾏时,需要动态的加载⼀些类这些类可能之前⽤不到所以不⽤加载到jvm,⽽是在运⾏时根据需要才加载,这样的好处对于服务器来说不⾔⽽喻,举个例⼦我们的项⽬底层有时是⽤mysql,有时⽤oracle,需要动态地根据实际情况加载驱动类,这个时候反射就有⽤了,假设 com.qlConnection,com.acleConnection这两个类我们要⽤,这时候我们的程序就写得⽐较动态化,通过Class tc = Class.forName("com.java.dbtest.TestConnection");通过类的全类名让jvm在服务器中到并加载这个类,⽽如果
是oracle则传⼊的参数就变成另⼀个了。这时候就可以看到反射的好处了,这个动态性就体现出java的特性了!举多个例⼦,⼤家如果接触过spring,会发现当你配置各种各样的bean时,是以配置⽂件的形式配置的,你需要⽤到哪些bean就配哪些,spring容器就会根据你的需求去动态加载,你的程序就能健壮地运⾏。
简介:
x86架构和arm架构区别Go 是⼀个开源的编程语⾔,它能让构造简单、可靠且⾼效的软件变得容易。
Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加⼊了Ian Lance Taylor, Russ Cox等⼈,并最终
于2009年11⽉开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有⼀个活跃的社区
⽬标:
Go的⽬标是希望提升现有编程语⾔对程序库等依赖性(dependency)的管理,这些软件元素会被应⽤程序反复调⽤。由于存在,因此这⼀语⾔也被设计⽤来解决多处理器的任务。
⼤约2007年开始开发Go,并于2008年投⼊了⼀组全职员⼯。⾕歌当初将该语⾔设计为⼀款系统编程语⾔,可以被⽤于、和数据库中。但是⾕歌认为,该语⾔还有望被⽤于其它领域。
硬件架构
Go语⾔设计⽀持主流的32位和64位的x86平台,同时也⽀持32位的ARM架构。
操作系统
Go语⾔在Go1版本上⽀持Windows, 苹果Mac OS X, Linux和FreeBSD操作系统。
go语⾔的历程:
2007年,⼯程师Rob Pike, Ken Thompson和Robert Griesemer开始设计⼀门全新的语⾔,这是Go语⾔的最初原型。[1]
2009年11⽉10⽇,Go语⾔以开放源代码的⽅式向全球发布。[1]
2011年3⽉16⽇,Go语⾔的第⼀个稳定(stable)版本r56发布。[2]
2012年3⽉28⽇,Go语⾔的第⼀个正式版本Go1发布。[2]
2013年4⽉04⽇,Go语⾔的第⼀个Go 1.1beta1测试版发布。[3]
2013年4⽉08⽇,Go语⾔的第⼆个Go 1.1beta2测试版发布。[3]
2013年5⽉02⽇,Go语⾔Go 1.1RC1版发布。[4]
2013年5⽉07⽇,Go语⾔Go 1.1RC2版发布。[5]
2013年5⽉09⽇,Go语⾔Go 1.1RC3版发布。 [6]
2013年5⽉13⽇,Go语⾔Go 1.1正式版发布。
2013年9⽉20⽇,Go语⾔Go 1.2RC1版发布。[7]
2013年12⽉1⽇,Go语⾔Go 1.2正式版发布。[8]
2014年6⽉18⽇,Go语⾔Go 1.3版发布。[9]
2014年12⽉10⽇,Go语⾔Go 1.4版发布。[10]
2015年8⽉19⽇,Go语⾔Go 1.5版发布,本次更新中移除了”最后残余的C代码”。[11]
2016年2⽉17⽇,Go语⾔Go 1.6版发布。[12]
2016年8⽉15⽇,Go语⾔Go 1.7版发布。[13]
2017年2⽉17⽇,Go语⾔Go 1.8版发布。[14]
2017年8⽉24⽇,Go语⾔Go 1.9版发布。[15]
2018年2⽉16⽇,Go语⾔Go 1.10版发布。[16]
go语⾔特性与优势:
特点:
简洁快速安全
并⾏有趣开源,
,安全,编译迅速
1. 保留但⼤幅度简化指针:  Golang 保留着C中值和指针的区别,但是对于指针繁琐⽤法进⾏了⼤量的简化,引⼊引⽤的概念。所以在
Golang 中,你⼏乎不⽤担⼼会因为直接操作内⼨⽽引起各式各样的错误。
2.多参数返回:
还记得在C⾥⾯为了回馈多个参数,不得不开辟⼏段指针传到⽬标函数中让其操作么?在 Go ⾥⾯这是完全不必要的。⽽且多参数的⽀持让Go ⽆需使⽤繁琐的 exceptions 体系,⼀个函数可以返回期待的返回值加上 error,调⽤函数后⽴刻处理错误信息,清晰明了。
3.Array, slice, map 等内置基本数据结构
Golang 最让⼈赞叹不易的特性,就是。任何数据结构,只要实现了 interface 所定义的函数,⾃动就 implement 了这个 interface,没有像
Java 那样冗长的 class 申明,提供了,让你的代码也⾮常⼲净。
4.OO ⾯向对象: Golang 本质上不是⾯向对象语⾔,它还是过程化的。但是,在 Golang 中,你可以很轻易的做⼤部分你在别的 OO 语⾔中能做的事,⽤更简单清晰的逻辑。是的,在这⾥,不需要 class,仍然可以继承,仍然可以多态,但是速度却快得多。因为本质上,OO 在Golang 中,就是。
5.Goroutine : 如果你完全不了解 Goroutine,那么你只需要知道,这玩意是超级轻量级的类似线程的
东西,但通过它,你不需要复杂的线程操作锁操作,不需要 care 调度,就能玩转基本的并⾏程序。在 Golang ⾥,触发⼀个 routine 和 erlang spawn ⼀样简单。基本上要掌握Golang,以 Goroutine 和 channel 为核⼼的是必须要懂的
优势:
1. 部署简单: go编译⽣成⼀个静态可执⾏⽂件,除了glibc外没有其他外部依赖,这让部署变得异常⽅便,⽬标机器上只需要⼀个基础的系统和
必要的管理,监控⼯具,完全不⽤操⼼应⽤所需的各种包库的依赖关系,⼤⼤减轻维护的负担.
2. 并发性好:Goroutine和channel是编写⾼并发的服务端软件变得相当容易,很多情况下不需要考虑锁机制以及相关的各种问题.单个go应
⽤也能有效的利⽤多个cpu,并发执⾏的性能好.
3. 良好的语⾔设计: 从学术⾓度讲go语⾔其实⾮常平庸,不过⽀持很多⾼级的语⾔特征,但从⼯程⾓度,go语⾔的设计⼗分优秀,规范⾜够简单
灵活,更重要的是go语⾔⾃带完善的⼯具链,⼤⼤提⾼团队的协作⼀致性.
4. 执⾏性能好: 虽然不如c与java,但通常⽐原⽣的python应⽤还是⾼⼀个数量级的,适合编写⼀些瓶颈业务,内存占⽤⼗分节省.
5. ⽀持,这属于的特性之⼀吧,虽然⽬前来说GC不算完美,但是⾜以应付我们所能遇到的⼤多数情况,特别是Go1.1之后的GC。
6. 跨平台编译,如果你写的Go代码不包含cgo,那么就可以做到window系统编译linux的应⽤,如何做到的呢?Go引⽤了的代码,这就
是不依赖系统的信息.
⽤途:
Go 语⾔被设计成⼀门应⽤于搭载 Web 服务器,存储集或类似⽤途的巨型中央服务器的系统编程语⾔。
对于⾼性能分布式系统领域⽽⾔,Go 语⾔⽆疑⽐⼤多数其它语⾔有着更⾼的开发效率。它提供了海量并⾏的⽀持,这对于游戏服务端的开发⽽⾔是再好不过了。
服务器编程,以前你如果使⽤C或者C++做的那些事情,⽤Go来做很合适,例如处理⽇志、数据打包、虚拟机处理、⽂件系统等。
分布式系统,数据库代理器等,这⼀块⽬前应⽤最⼴,包括Web应⽤、API应⽤、下载应⽤、
内存数据库,前⼀段时间google开发的groupcache,couchbase的部分组建
云平台,⽬前国外很多云平台在采⽤Go开发,CloudFoundy的部分组建,前VMare的技术总监⾃⼰出来搞的apcera云平台。
Go成功的项⽬:
nsq:bitly开源的消息队列系统,性能⾮常⾼,⽬前他们每天处理数⼗亿条的消息
docker:基于lxc的⼀个虚拟,能够实现PAAS平台的组建。
packer:⽤来⽣成不同平台的镜像⽂件,例如VM、vbox、AWS等,作者是vagrant的作者
skynet:分布式调度框架
Doozer:分布式同步⼯具,类似ZooKeeper
Heka:mazila开源的⽇志处理系统
cbfs:couchbase开源的分布式⽂件系统
tsuru:开源的PAAS平台,和SAE实现的功能⼀模⼀样
groupcache:memcahe作者写的⽤于Google下载系统的缓存系统
god:类似redis的缓存系统,但是⽀持分布式和扩展性
gor:⽹络流量抓包和重放⼯具
各⼤公司的go语⾔应⽤:
Google
Facebook
腾讯
主要职责是:
负责腾讯游戏蓝鲸平台后台开发⼯作
负责容器相关的开发⼯作
和蓝鲸平台,容器开发有关。腾讯作为主要使⽤C/C++的公司,使⽤Go会⽅便很多,也有很多优势,不过⽇积⽉累的C/C++代码很难改造,也不敢动,所以新业务会在Go⽅⾯尝试。
百度
其次就是百度的消息系统,从其最近的Golang招聘介绍就可以看出来.
负责公司⼿百消息通讯系统服务器端开发及维护
京东
京东云消息推送系统、云存储,以及京东商城等都有使⽤Go做开发。
⼩⽶
此外,⼩⽶互娱、⼩⽶商城、⼩⽶视频、⼩⽶⽣态链等团队都在使⽤Golang。
360
360直播在招聘Golang开发⼯程师。
美团、滴滴、新浪以及七⽜等。⼀般的选择,都是选择⽤于⾃⼰公司合适的产品系统来做,⽐如消息推送的、监控的、容器的等,Golang特别适合做⽹络并发的服务,这是他的强项,所以也是被优先⽤于这些项⽬。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。