Go语言为什么在国内很火?

ycoolone


主要是go的市场切入点非常准确

go被设计出来的目标应用场景是服务器开发,而服务器端开发是c++和java的地盘,占了大部分份额,go的目标是从他们嘴里抢蛋糕

程序员选语言除了流行度以外,语言是否好用,写的程序是否够快这两点也是重要的参考指标。

c++的特点是足够快,却不是很好用

java的特点是足够好用,但不见得快

又快又好用,又符合大众口味, 又专注于服务器领域的语言,似乎没有

于是go诞生了

go语言在易用性方面秒杀c++这点毋庸置疑,任何有服务器开发经验的程序员都可以快速上手go语言, 门槛非常友好。而c++,即使你有十年编程经验,初玩c++ 也非被摔个七荤八素不可。

至于在性能方面是否比java强?假如写go程序和java程序的都是经验丰富的优秀程序员,那么用go写的程序不一定比用java写的程序员快。然而,如果都是初次使用这两门语言的程序员写程序,那么go程序必定比java程序快。

其中原因在于go是一门以并发编程为特色的而设计的语言,在语法层面支持协程,也就是goroutines。而java不支持协程,只支持多线程。表面上看协程和线程似乎是同一个东西,能达到的效果也相同,但是在底层的实现上却有着非常大的区别,在服务器端的绝大部分应用中,协程要比线程节省资源的多。

通俗易懂的讲,线程是操作系统的资源,当java程序创建一个线程,虚拟机会向操作系统请求创建一个线程,虚拟机本身没有能力创建线程。而线程又是昂贵的系统资源,创建、切换、停止等线程属性都是重量级的系统操作,非常消耗资源,所以在java程序中每创建一个线程都需要经过深思熟虑的思考,否则很容易把系统资源消耗殆尽。

而协程,看起来和线程差不多,但创建一个协程却不用调用操作系统的功能,编程语言自身就能完成这项操作,所以协程也被称作用户态线程。我们知道无论是java还是go程序,都拥有一个主线程,这个线程不用显示编码创建,程序启动时默认就会创建。协程是可以跑在这种线程上的,你可以创建多个协程,这些协程跑在主线程上,它们和线程的关系是一对多。如果你要创建一个线程,那么你必须进行操作系统调用,创建的线程和主线程是同一种东西。显然,协程比线程要轻量的多。

既然协程这么优秀,为什么不彻底替代线程呢?事实上协程和线程完全不是两个相同层面的东西,完全谈不上替代一说,协程可以说是一个独立于线程的功能,它是在线程的基础上,针对某些应用场景进一步发展出来的功能。我们知道,线程在多核的环境下是能做到真正意义上的并行执行的,注意,是并行,不是并发,而协程是为并发而生的。

打个简单的比方吧,射雕英雄传看过吧,周伯通教郭靖一手画圆,一手画方,两只手同时操作,左右互搏,这个就是并行。普通人肯定做不到,不信你试试。你不能并行,却可以并发,你先左手画一笔,然后右手画一笔,同一时候只有一只手在操作,来回交替,直到完成两个图案是,这就是并发,协程主要的功能。

想象一下业务场景,你需要执行两个互不依赖的sql查询,为了减少等待时间,常规的操作肯定主线程执行sqlB的同时另起一个线程执行sqlA,使两个sql并行执行。然而你会发现,执行两个sql的线程大多数时间只是在等待数据库服务器的响应,线程只是处于阻塞等待状态,而不是疯狂运转,而线程的创建、切换又很消耗系统资源,显然这很浪费。这个时候就该协程大展身手了,你可以在主线程中创建一个协程用于执行sqlB,然后再在主线程中执行sqlA,协程和线程一样,不会阻塞主线程,所以sqlB得到结果后,你可以通过语言的api去看看在协程中的sql执行完毕了没有,如果没有则等待,如果执行完毕了就拿结果,和线程操作几乎一摸一样。至于sqlA和sqlB是否真正在并行执行根本无所谓。为什么呢? 我们假设执行一个sql需要三步,提交sql、等待、获得结果 ,其中第一步和第三步极省时,只要1毫秒一步,而第二步却要1000毫秒,那么使用并行的多线程执行两个sql,你只要花掉1002毫秒,而使用并发的协程你要花掉1004毫秒,但是线程比协程多消耗一个线程的资源,请问你会为了这2毫秒而选择多线程吗,显然不可能,创建线程的开销都要大于节省下来的时间,这就是协程存在的理由。

而服务器端开发中,大多数时候都是要花大量等待时间的场景,也就是所谓的IO密集,协程极为适合这种场景,而go又主打协程,直接从语法层面支持,切中了以往开发高性能程序太过于复杂的痛点,因此广受程序员们的欢迎。java其实也可以模拟出协程的效果,比如用nio和多线程,也能假装goroutines的效果,但实际操作起来太过于麻烦,还要掌握一大堆枯涩的概念,完全没有goroutines的优雅。所以在并发性能上,go完胜java。换言之,go比java更适应高并发场景,能更优雅方便的写出高并发程序。

当然,以上只是go流行起来原因的其中之一。除此之外非常重要的原因在于,go语言有一个好爹google,以及祖师爷级别的创始人unix与C语言之父肯·汤普逊。想象一下,c语言已经如此牛逼,而还只是这位大神早年的作品,那么现在同样出于他手的go语言势必是集大成的作品,而且还有财大气粗口碑出众的google背书,简直就是含着金钥匙出生啊,不牛逼都难,不去用用简直枉为程序员。

对标一下技术上同样出众的.net core,各方面都不输于go,但就是火不起来,究其原因还是爹作的孽,微软的原罪已经成了广大互联网程序员的刻板影响,一时三刻无法逆转,即使近年来有所改善,但还是和谷歌相去甚远,这也是.net core明明足够优秀但就是没法赢得程序员们青睐的原因。

以上这些就是go语言为什么这么火的部分原因。


程序员解决问题之道


谢谢邀请!

Go语言不只是在国内很火,在全球范围了也有不少的大名鼎鼎的公司在使用,比较著名的是全球发展最快的移动互联网公司字节跳动,以及国内最好的二次元视频网站bilibili都在使用Go语言作为主要的后端开发语言,你天天在用的抖音、今日头条、哔哩哔哩背后离不开Go语言的功劳。

全球有哪些公司在使用Go语言

目前在全球范围内使用Go语言的科技公司并不在少数,很多企业更是将Go语言作为自己的核心技术栈,这其中就包括了Google、Facebook、Amazon、Docker、腾讯、百度、阿里、字节跳动、哔哩哔哩视频网站等等。

Google作为开发Go语言的企业,自然是要支持Go语言的,Google的开源项目里面不少就是使用Go语言开发的,Google的GitHub开源主页里面,至少有五分之一的项目都是用Go语言开发的。

Facebook也将Go语言作为主要开发语言,在Facebook内部,PHP、Go都占据了很大的比例,其中大名鼎鼎的grace就是用Go语言开发的。亚马逊的AWS能够成为全球最大的云计算公司,Go语言功不可没,现在阿里云也在追寻AWS的脚步,开始大规模使用Go语言开发自己的云计算产品。

Docker相信已经不需要我过多介绍了,作为目前全行业最好的容器,Go是Docker公司最重要的编程语言。相应的腾讯在也曾做过万台规模的Docker实验,因此腾讯在这一块也做出了很多尝试,大名鼎鼎的腾讯游戏蓝鲸平台就需要很多的Go语言工程师来做容器开发,腾讯的核心技术栈是C/C++,不过很多业务用Go语言做起来方便很多,可是腾讯的技术栈很多都基于C/C++,重构难度极大,因此腾讯在很多新业务都在尝试用Go语言来开发。

春晚的时候大家应该都见识了百度技术的强大,估计不少人都被百度强大的技术实力折服了,这里面百度底层架构的稳定起了很大的作用。百度运维的BFE项目,主要是负责前段流量的介入,以及百度的消息系统,这两块非常重要的业务的后端服务器开发和维护都是使用Go语言。

最后说一说比较年轻的三家中国公司,一家是七牛云,是目前最好的云计算公司之一,七牛云的老板许式玮是原来雷军时代金山WPS的架构师,也是中国最早的Go语言布道者。字节跳动旗下的抖音、今日头条等产品线的后端开发很大比例都是通过Go语言来实现的,因此字节跳动也是Go语言大户。最后是上一次哔哩哔哩的代码泄漏,大家也看到了,哔哩哔哩的核心代码几乎全是Go语言写的。

Go语言有哪些优势

性能极其出色:Go语言的性能非常出色,最关键的是在性能强劲的同时还能像Python语言一样高效地进行开发,要知道Go语言是静态语言,而Python是动态语言。

编译方便、部署简单:Go语言可以直接编译为机器码,编译生成的是一个静态可知从文件,除了glibc之外没有不依赖其他外部库。部署就直接扔一个文件就可以了,目标机器上只需要基础的系统,必要的管理、监控工具就可以了,完全可以不用考虑各种包、库的以来关系,维护成本也大大降低。

出色的并发性能:这一点对于后端语言还是很重要的,曾经Java最大的杀手锏,一个是跨平台、一个就是强大的并发能力。Go语言是语言层面的支持并发,这一点你可以充分利用多核,也可以非常容易的使用并发。

良好工程语言:Go语言可能不具备很好的学术特性,很多高级编程语言有的特性Go语言都没有,可这却让Go语言成为一个非常好的工程语言,没有任何多余的,规范非常简单灵活,这一点你用Java就知道了,也有完善的工具链,几乎就是为工程而生的。

Go语言的应用场景

Go语言在消息推送、监控、容器、处理日志、数据打包、虚拟机处理、文件系统等领域非常有优势,并且非常适合用来做网络并发服务。

服务器编程、分布式系统、数据库代理起、网络编程、内存数据库、以及各种各样的云平台,这都是Go语言的主战场。

说了这么多,我觉得作为一个程序员,你或许真的有必要学习一下Go语言,这真的是一门非常优秀的编程语言。


本文为字节跳动签约作者EmacserVimer悟空问答原创文章,未经允许转载、抄袭必究!

EmacserVimer


Go语言是谷歌2009发布的第二款开源编程语言,以其可以媲美C或C++代码的速度,而且更加安全、支持并行进程得到人们的喜爱,而它高并发的特性在后端语言中越来越流行。

根据 Google Trends 的统计结果,可以看到 Go 语言在过去一年中的流行程度是稳中有升。

Go 语言在 2017 年的流行趋势


初看起来,Go 语言在 2017 年表现得比较平淡。但是可以看看从2016-2017年的趋势:

Go 语言在过去 5 年间的流行趋势


根据图上数据显示,Go 语言在 2017 年的“上升”是对近年来的一种延续,Go 语言的适用范围一直在不断地扩大。经过广大开发者的共同努力,它已开始涉足在当前大热的数据科学和机器学习领域。虽然还只是开始,深信 Go 语言在人工智能时代和机器人时代也能大放异彩。

同时,中国的开发者对于 Go 语言的流行起着至关重要的作用。

Go 语言在 2017 年的流行区域热图


GO语言的发展,让越来越多的互联网公司对程序员有了更高的技术要求。

2018年腾讯后台开发工程师招聘要求

2018年阿里巴巴开发工程师招聘要求


2018年今日头条开发工程师招聘要求


以上是在某招聘网站显示的,BAT互联网行业对程序员的招聘,都有一个形似的要求:熟练GO语言开发的优先。

由此看来,GO语言成为程序员招聘时候的一个加薪亮点了。

为了让大家在这个三金四银的招聘跳槽季,找到让大家心满意足的工作,笔者特意整理了黑马程序员2018年版GO语言开发视频+源码。

20个小时快速入门GO语言(部分资料截图)

这里发不了链接,点赞并关注我即可免费获得“20个小时快速入门GO语言”资源,小手动起来吧!


黑马程序员


go语言推出有几年了,似乎不温不火。但是在中国范围内,确实被关注的一塌糊涂。

这是2017年2月份TIOBE出的编程语言排名:

但是在中国,很多公司,很多程序员都在谈论go语言,也就是说在中国对于go的关注异常火爆。

根据谷歌搜索的统计,如下图:

外国人专门写了一篇文章,来分析为什么go在中国如此火:《Why is Golang popular in China?》为了方便查看文章,我把网页内容以图片的方式展示出来,如下图:

同时我也参考了知乎一位匿名作者的答案

这个“火”字看你怎么理解了。
Go在国内更火只是感觉上的。比如推文,以及谈论的相关话题较多而已(但能有nodejs多么?),本身中国人口数量就多,按这个衡量的办法去看的话,swift在国内也比在国外火;
实际上Go在国外更火(这里的火是实际的使用情况),对比一下国内和国外使用Go的程度、数量,Go相关的技术大会举办的频率和数量就一目了然了。
Go在国内真正上被全栈使用的就七牛一家,但国外除了docker,coreOS还有很多初创企业。
国内比较有影响力的就一个beego框架,你看看国外的有多少。
去github上搜一下active的Go的project数量,看看Go在国外是不是没人用?我反正在github的trending里面几乎每天都能看到Go的project。hacker news上面有关Go的“xxx writen in Go”的炒作文也不要太多。
这个 dariubs/GoBooks · GitHub 是有人整理的Go相关的书籍,看看是不是国外的书籍比国内的少?8月份K&R中的K也要推出属于Go的圣经了。
另外老有人喜欢说:Google喜欢关闭产品,这玩意儿迟早死掉。可惜golang是开源项目,关不掉的,CloudFlare那个crypto的patch(Gerrit Code Review)以后可能会进Go的标准库,Godep已经成为事实上的包管理标准,这些都是社区自己搞出来的,和google一毛线关系没有。另外就是最近google自己一些主力产品或者平台在优先支持语言上,Go总是和java,c/c++,python一起名列其中,grpc就是一个例子等等。所以,觉得Go只是google的一个玩具的人,你的观点能不能站得住脚,自己掂量吧。
我的个人观点是:
Go显示已经站住了脚跟(如果是2013年,我还是不敢说这种话的),找到了属于自己的空间,但是比起那些主流的甚至nodeJS来说,还是使用的不够广泛。这个语言人为炒作也罢,一些人认为的google光环也罢,实际使用也罢,总之:
这个语言已经站住脚跟了,能用于并且已经用于生产环境了,接下来几年只会一直呈上升势头。

-------------------------------

最后

1、一些真正使用go语言的公司:
这些公司在高速发展的同时,Golang也因此在国内逐渐传播开来。在云计算时代,从国内Go语言发展和应用来看,七牛算是国内第一家选Go语言做服务端的公司。早在2011年,当Go语法还没完全稳定下来的情况下,七牛就已经选择将Go作为存储服务端的主题语言。关于这点,七牛CEO许式伟谈到:编程哲学的重塑是Go语言独树一帜的根本原因,其它语言仍难以摆脱OOP或函数式编程的烙印,只有Go完全放弃了这些,对编程范式重新思考,对热门的面向对象编程提供极度简约但却完备的支持。Go是互联网时代的C语言,不仅会制
霸云计算,10年内将会制霸整个IT领域。
2、在中国程序员眼中,谷歌出品必属精品
确实,在互联网世界,在开源世界,Google为我们贡献了太多太多。
3、创业公司假装高逼格,假装geek范儿
The word geek is a slang term originally used to describe eccentric or non-mainstream people;in current use,the word typically connotes an expert or enthusiast or a person obsessed with a hobby or intellectual pursuit,with a general pejorative meaning of a"peculiar person,especially one who is perceived to be overly intellectual,unfashionable,or socially awkward"
4、 docker异常火爆,带动了对go语言的关注
Docker是PaaS供应商dotCloud开源的一个基于LXC的高级容器引擎,源代码托管在GitHub 上,基于Go语言开发并遵从Apache2.0协议开源。
5、go语言本身的一些特性
部署简单并发性好
性能好
6、《go语言从入门到放弃》一书的火爆

充电室


Go语言是谷歌2009发布的第二款开源编程语言,作为火爆好入职的编程语言,自面世以来,以高效的开发效率和完美的运行速度,迅速风靡全球,被誉为“21世纪的C语言”。

Go语言专门针对多处理器系统应用程序的编程进行了优化,可以在不损耗程序性能的前提下简化代码的复杂性,使用Go编译的程序不仅媲美C/C++代码的速度,而且更加安全、支持并行进程。

国内外哪些企业在使用Go语言?

国外如Google、facebook、AWS等,国内如阿里巴巴、腾讯、百度、抖音、小米、京东、360、网易、新浪、爱奇艺、哔哩哔哩等都已开始大规模使用Go语言开发各种应用。

还记得Gopher China 2019大会吗?滴滴公司作为主办方分享Go语言在大型微服务框架设计方面的实践,百度分享Go语言在春晚抢红包项目、自动驾驶、百度智能小程序、百度APP等方面的应用优势,知乎使用Go语言重构代码后节省超过80%的服务器资源。此外,腾讯也在积极向Go语言靠拢。

Go语言能做什么?

  1. 服务端开发

  2. 爬虫及大数据

  3. 网络编程

  4. Paas云平台领域

  5. 分布式存储领域

  6. 区块链领域

  7. 容器虚拟化

2010年1月10日,Go语言摘得了TIOBE公布的2009年年度大奖。随着《2018中国区块链产业白皮书》的发布,区块链被列入国家战略,Go语言作为区块链主流编程语言怎能不火?

Go语言的优势

  1. 强悍并发性能(Go内置Goroutine协程调度机制,处理并发性相当强悍);

  2. 开发速度快(这个奇特的语言代码简易度接近Python,运行速度媲美C语言);

  3. 人才缺口大(供求比例1:10),就业薪资高(从业3年薪资25k+),方向广(移动互联网、数据服务、电子商务、金融、企业服务、游戏、O2O、社交网络、文化娱乐、教育、医疗健康、广告营销等等)。

Go语言的应用领域

服务器编程(处理日志、数据打包、虚拟机处理、文件系统)、网络编程(Web应用、API应用、下载应用)、云平台、内存数据库等。

人人追喊“寒冬”,为何Go语言从业者薪资一路高涨,人才却少之又少。

Hired 发布《2019 软件工程师状态》最新数据报告显示,Go打败Scala、Ruby、Java、Java、PHP、Python,Go语言从业者成为2019年最具新引力的人才。请问你的吸引力指数是多少?


数字技术观察


因为中国跟风严重。。比如说react native,就有公司冲上去就搞,其实老外根本很少用。甚至都不了解就去用了,有多少人认为react native就是java的感觉,开发一次,Android iOS都能跑。


MageBJ


因为都是做网络的


HerrIdol705


因为学不懂C语言


我们都只是时间的过客


主要是培训机构炒的,还有区块链[灵光一闪]学go也就大点的公司招人,没点能力大公司还真进不去。。小公司为了成本通常用java或者php了,招人成本也小


Vgjnbj


个人觉得没有多火,我记得尼比鲁好像用的go,感觉这是个卡在中间的语言,小公司不敢用,大公司更不敢用。不过部署是真的快,开发效率也高,就是维护麻烦。


分享到:


相關文章: