(java有必要转go吗)(java和go哪个有前景)

  • 背景&&引言
  • 为什么这么多人偏爱Go语言
  • Go语言能做什么
  • 使用Go语言的项目代表
  • 使用Go语言的公司代表
  • go语言在未来能否撼动Java的地位
  • 结语&&建议
  • 背景&&引言

    Go发布之后,很多公司特别是云计算公司开始用Go重构他们的基础架构,很多都是直接采用Go进行了开发,比如最近热火朝天的Docker就是采用Go开发的。最近越来越发现,Go语言颇受很多公司的喜爱,开始使用go语言了。

    您有没有想过,他们为什么会选择Go呢?与其他语言的应用相比,它有什么优点呢?还有在当下互联网公司java语言仍是主导的背景下,go语言的现状到底怎样,潜力又是如何呢,且看本文,慢慢道来(部分内容整理于网络)。

    (java有必要转go吗)(java和go哪个有前景)

    图片来源网络

    为什么这么多人偏爱Go语言

    选择Go语言的原因可能会有很多,关于Go语言的特性、优势等。下面回答为什么有那么多公司选择Go,与其他语言的应用相比,它有什么优点。

    1. 学习曲线

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

    1. 开发效率

    GO语言使用起来简单、代码描述效率高、编码规范统一、上手快,接近PHP的开发效率。 通过少量的代码,即可实现框架的标准化,能快速的构建各种通用组件和公共类库,进一步提升开发效率,实现特定场景下的功能量产。

    在实际项目开发过程中,对开发效率提升最大的,无疑是 符合系统业务场景的公共组件能力,这点也正好应证了Rob Pike那句话(Less is lessor Less is more),真正的高效率开发,是配置化的,并不需要写太多的代码,甚至根本就不需要写代码,即可完成逻辑实现,而这种方式对于后期的维护成本也是最优的,因为做到了高度的统一。

    1. 执行性能

    Go拥有接近C的运行效率,对于一些服务来说,性能是极其重要的一环,事关系统的吞吐、访问的延迟,进而会影响用户的体验,Go语言通过协程可以方便的实现并行处理,达到处理效率的最大化 ,提升系统的吞吐能力。

    1. 出身名门、血统纯正

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

    (java有必要转go吗)(java和go哪个有前景)

    Go强大的开发团队

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

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

    1. 强大的标准库

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

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

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

    1. 简单的并发

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

    1. 稳定性

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

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

    Go语言能做什么

    鉴于Go语言的特点和设计的初衷,Go语言作为服务器编程语言,具有下面优点:

    • 服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。
    • 分布式系统、数据库代理器、中间件等,例如Etcd。
    • 网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用,而且Go内置的net/http包基本上把我们平常用到的网络功能都实现了。
    • 内存数据库操作
    • 开发云平台,目前国外很多云平台在采用Go开发
    • 区块链开发(主要以以太坊为主导)

    使用Go语言的项目代表

    使用 Go 语言开发的开源项目非常多。早期的 Go 语言开源项目只是通过 Go 语言与传统项目进行C语言库绑定实现,例如 Qt、Sqlite 等;后期的很多项目都使用 Go 语言进行重新原生实现,这个过程相对于其他语言要简单一些,这也促成了大量使用 Go 语言原生开发项目的出现。

    1、云计算基础设施领域 代表项目:docker、kubernetes、etcd、consul、cloudflare CDN、七牛云存储等。

    2、基础软件 代表项目:tidb、influxdb、cockroachdb、codis、delve、grace等。

    3、web框架:beego、martini

    4、微服务 代表项目:go-kit、micro、monzo bank的typhon、bilibili等。

    5、互联网基础设施 代表项目:以太坊、hyperledger等。

    一般的选择,都是选择用于自己公司合适的产品系统来做,比如消息推送的、监控的、容器的等,Golang特别适合做网络并发的服务,这是他的强项,所以也是被优先用于这些项目。Go语言作为一门大型项目开发语言,在很多大公司相继使用,甚至完全转向Go开发。

    这里不再详述,后面文章再详列。

    使用Go语言的公司代表

    1、Google

    这个不用多做介绍,作为开发Go语言的公司,当仁不让。Google基于Go有很多优秀的项目,比如:https://github.com/kubernetes/kubernetes ,大家也可以在Github上 https://github.com/google/ 查看更多Google的Go开源项目。

    2、Facebook

    Facebook也在用,为此他们还专门在Github上建立了一个开源组织facebookgo,大家可以通过 https://github.com/facebookgo 访问查看facebook开源的项目,比如著名的是平滑升级的grace。

    3、今日头条

    Nsq 是由Go语言开发的高性能、高可用消息队列系统,性能非常高,每天能处理数十亿条的消息;Gor:网络流量抓包和重放工具。头条主要使用go,还有很多go产品,比如分布式调度框架Skynet等

    4、腾讯

    腾讯作为国内的大公司,还是敢于尝试的,尤其是Docker容器化这一块,他们在15年已经做了docker万台规模的实践,具体可以参考http://www.infoq.com/cn/articles/tencent-millions-scale-docker-application-practice

    5、百度

    目前所知的百度的使用是在运维这边,是百度运维的一个BFE项目,负责前端流量的接入。他们的负责人在2016年有分享,大家可以看下这个http://www.infoq.com/cn/presentations/application-of-golang-in-baidu-frontend

    6、阿里

    阿里中间件、阿里云CDN等都在使用。

    7、京东

    京东云消息推送系统、云存储,以及京东商城等都有使用Go做开发。

    8、小米

    小米对Golang的支持,莫过于运维监控系统的开源,也就是 http://open-falcon.com/

    此外,小米互娱、小米商城、小米视频、小米生态链等团队都在使用Golang。

    9、360

    360对Golang的使用也不少,一个是开源的日志搜索系统Poseidon,托管在Github上,https://github.com/Qihoo360/poseidon

    还有采用Go的一些国外公司,如Docker、Apple、Cloud Foundry、CloudFlare、Couchbase、CoreOS、Dropbox、MongoDB、AWS等公司; 采用Go开发的国内企业:如百度、小米、七牛、PingCAP、华为、金山软件、猎豹移动、饿了么、新浪微博、爱奇艺、网易、聚美优品、高升控股、探探、斗鱼直播、人人车、亚信、Udesk、方付通、招财猫、三一集团、美餐网等公司。

    还有很多公司我们在这里就不一一列举了,从中我们也可知道Go语言的受欢迎程度。

    go语言在未来能否撼动Java的地位?

    据近年来TIOBE最受欢迎语言排行榜,我们很容易会发现一个现象:Java语言长盛不衰,多次连续获得最受欢迎语言排行榜第一名,对于很多程序员而言,这似乎已经成为一个习惯,Java也顺理成章的成为很多编程人员学习的首选。

    但是很多语言的快速崛起,似乎对Java造成了一定的冲击,尤其是go语言,那么go语言能否超越java呢?

    (java有必要转go吗)(java和go哪个有前景)

    图片来源于网络


    一个技术能不能发展起来,关键要看三点:一个是语言有没有形成一个良好的生态(社区),另外一个是语言本身有没有工业化的标准,最后一个是有没有一个或多个杀手级应用
    从语言的生态来说一旦某个语言在一个领域建立了自己的生态系统那么它的地位几乎很难被撼动了,java语言在大数据、云计算、企业应用方面有了无数的Library、Framework、App,以及会使用这些东西的程序员。类似的情况还有COBOL语言在金融领域、C语言在操作系统内核和嵌入式领域。

    上述的这三点是非常关键的,新的技术只需要占到其中一到两点就已经很不错了,何况有的技术,比如 Java,是三点全占到了,所以,Java 的发展是如此好。当然,除了上面这三点重要的,还有一些其它的影响因素,比如:

    • 学习曲线是否低,上手是否快。这点非常重要,C++ 在这点上越做越不好了。
    • 有没有一个不错的提高开发效率的开发框架。如:Java 的 Spring 框架,C++ 的 STL 等。
    • 是否有一个或多个巨型的技术公司作为后盾。如:Java 和 Linux 后面的 IBM、Sun……
    • 有没有解决软件开发中的痛点。如:Java 解决了 C 和 C++ 的内存管理问题。

    用这些标尺来量一下 Go 语言,我们可以清楚地看到:

    • Go 语言容易上手;
    • Go 语言解决了并发编程和写底层应用开发效率的痛点;
    • Go 语言有 Google 这个世界一流的技术公司在后面;
    • Go 语言的杀手级应用是 Docker,而 Docker 的生态圈在这几年完全爆棚了。

    所以,Go 语言的未来是不可限量的。当然,我个人觉得,Go 可能会吞食很多 C、C++、Java 的项目。不过,Go 语言所吞食主要的项目应该是中间层的项目,既不是非常底层也不会是业务层

    也就是说,Go 语言不会吞食底层到 C 和 C++ 那个级别的,也不会吞食到高层如 Java 业务层的项目。Go 语言能吞食的一定是 PaaS 上的项目,比如一些消息缓存中间件、服务发现、服务代理、控制系统、Agent、日志收集等等,没有复杂的业务场景,也到不了特别底层(如操作系统)的中间平台层的软件项目或工具。而 C 和 C++ 会被打到更底层,Java 会被打到更上层的业务层。

    结语&&建议

    Go的应用范围一直在扩大,云计算,微服务,区块链,哪里都有用Go写的重量级项目。

    对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于极致追求性能的服务端是再好不过了。

    这个世界上有太多有意思的问题和领域值得我们去学习和探索。技术的发展过程非常重要。因为你可以清楚地看到了这种新技术的生态圈发展过程。让我们收获最大的并不是这些技术本身,而是一个技术的变迁和行业的发展。对开发者而言,保持对新技术新语言的跟进是很有必要的。但语言只是一门工具,最终是用来表达你思想和思维的,只要能帮你快速解决问题达到目标,对你而言就是好语言。

    末了。诚恳欢迎大家关注我,后面我会分享更多精彩的文章呈现给大家。

    声明:我要去上班所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者IT之眼所有,原文出处。若您的权利被侵害,请联系删除。

    本文标题:(java有必要转go吗)(java和go哪个有前景)
    本文链接:https://www.51qsb.cn/article/m87cy.html

    (0)
    打赏微信扫一扫微信扫一扫QQ扫一扫QQ扫一扫
    上一篇2023-05-28
    下一篇2023-05-28

    你可能还想知道

    发表回复

    登录后才能评论