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语言是谷歌2009发布的第二款开源编程语言,作为火爆好入职的编程语言,自面世以来,以高效的开发效率和完美的运行速度,迅速风靡全球,被誉为“21世纪的C语言”。
Go语言专门针对多处理器系统应用程序的编程进行了优化,可以在不损耗程序性能的前提下简化代码的复杂性,使用Go编译的程序不仅媲美C/C++代码的速度,而且更加安全、支持并行进程。
国内外哪些企业在使用Go语言?
国外如Google、facebook、AWS等,国内如阿里巴巴、腾讯、百度、抖音、小米、京东、360、网易、新浪、爱奇艺、哔哩哔哩等都已开始大规模使用Go语言开发各种应用。
还记得Gopher China 2019大会吗?滴滴公司作为主办方分享Go语言在大型微服务框架设计方面的实践,百度分享Go语言在春晚抢红包项目、自动驾驶、百度智能小程序、百度APP等方面的应用优势,知乎使用Go语言重构代码后节省超过80%的服务器资源。此外,腾讯也在积极向Go语言靠拢。
Go语言能做什么?
服务端开发
爬虫及大数据
网络编程
Paas云平台领域
分布式存储领域
区块链领域
容器虚拟化
2010年1月10日,Go语言摘得了TIOBE公布的2009年年度大奖。随着《2018中国区块链产业白皮书》的发布,区块链被列入国家战略,Go语言作为区块链主流编程语言怎能不火?
Go语言的优势
强悍并发性能(Go内置Goroutine协程调度机制,处理并发性相当强悍);
开发速度快(这个奇特的语言代码简易度接近Python,运行速度媲美C语言);
人才缺口大(供求比例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,感觉这是个卡在中间的语言,小公司不敢用,大公司更不敢用。不过部署是真的快,开发效率也高,就是维护麻烦。