来聊一聊go和java之间对比
前言
之前是在互联网公司写java服务端+比较简单的前端,平时主要写java业务代码,外加一点前端jquery,html等。
来新公司之后,也是做服务端开发,不过不是互联网行业,而且业务比较吃性能,所以用Go语言作为业务开发使用,然后用python作自动化测试和业务脚本,bash做服务器脚本,bash主要用来调用python脚本以及部署服务。
学习Go难吗
别的语言我不太了解,不过java转go比较轻松的,可能两个都属于入门比较简单易学的,所以学习了一周Go之后就上手开发业务了。
很多同事是从C++转go的,C++的学习难度大于java,大于go,所以转过来我感觉也挺轻松的吧。
从java转Go很多概念也可以沿用,比如面向对象的思想,接口,垃圾回收等。
学习Go的资料也比较多,在这里推荐一本书Go语言圣经 《The Go Programming Language》 中文版本:https://docs.hacknode.org/gopl-zh/index.html
优劣对比
每个语言都有自己的优势以及劣势,在这里我大概讲一下我的体验,仅代表我个人观点。
- 性能:这个是java和go之间对比必须聊到的一个话题,性能一直是java开发经常吐槽的地方。在串行的业务下,java的性能就比Go差,并发业务下,java更比go差远了。这个可能Go比较偏向于C,C++的缘故吧,go的性能可以媲美c,c++。
- 多线程:这个又是Go的一大优势了,个人感觉Go就是为多线程而生的,语法直接支持多线程,使用go语法即可使用多线程。在多线程逻辑实现方面Go也比java更清晰,更简单,这个就是后发语言的优势了,不知道kotlin能不够弥补这个缺点。在性能方面,Go多线程也是碾压java,Go协程相对于传统操作系统中的线程 (thread) 是非常轻量级的,所以Go在多线程方面是比java又快内存占用又小。
- 生态:这个是java的最大优势,现在go还处于发展阶段,每个新版本出来大家都要抢着升级,因为新功能太重要了,不用不行。就比如包管理功能,从go vendor到go module,都没有java maven强大,但是都不得不用。java新版本出来了,可能不见得会去升级,好多公司现在还在用jdk1.6,因为该有的功能java都已经有了,没必要再去赶潮流。还有java的spring全家桶,虽然go没有spring,不过好在go的web模块功能也还比较强大,虽然没有spring系列方便,但是也足够使用了。
- 编译,部署:这个对于java来说可能是最轻松的事了吧,在之前的互联网公司的时候,从来没有碰到过部署方面难题,更不用说编译了,本地编译ok,服务器一定更加ok,然后部署放到类似于阿里云这类的云容器上面,一键上线轻轻松松。但是go就不一样了,编译go如同编译C++一样,不同操作系统需要交叉编译,由于依赖服务器的一些环境,所以本地还运行不了Go程序,没办法本地debug,部署更是如同打仗一般,需要写很多python脚本来将编译构建之后部署至docker,k8s上。不太清楚别的使用go的公司是不是这样,对于我来说,编译部署这块内容就如同从天堂掉到了地狱。
- 其他:在这里吐槽一点,Go开发太难招了,java遍地都是,而且很多有经验的java开发还不愿意转go,这也是go现在很难流行起来的原因吧。做了Go开发之后,要做好长期待在一家公司的准备了,因为出去找家新的太难了,一定要老老实实的待在原地,不像java,去哪里都不缺工作,好多公司就连测试都只招会Java的。
欢迎评论
我目前在公司里java和go都在使用,go和java都在写,不存在对java非常排斥,对go非常喜欢的想法,然后还在学python,bash等语法,有时还写点部署,脚本代码,对于各种语言都比较愿意接触,个人感觉多学几种语言对自己还是很有帮助的,深入了解了各种语言才能更好更快的去处理各类复杂的场景。在这里只是希望理性的讨论一下热门语言的对比,希望大家有想法可以评论一下,谈一谈你对各种语言的感受。
#Java##Go#