Java语言给人的印象是长盛不衰,从笔者上大学的时候,就不断地听到有什么语言会取代Java的观点,但时至今日,Java依然是应用范围最广的语言。并不是Java有多么完美,而是Java依托Oracle这个庞大的生态系统,在可预见的未来无人能撼动。也正因为这样,Java也愈加成熟完善。
但是在网络开发领域,Java并非一枝独秀。源于互联网开发的特点,对并发性的要求较高。而go语言实施起来较为简便,而且并发性较好,运行效率较高,同时也具有一定的安全性。对于很多讲究简洁精悍的网站,用go语言来开发网站后台就显得比较完美。
Go语言自亮相以来并没有展示一个明确的方向,Google员工将Go语言成为一个“试验性语言”,称其试图融合Python等动态语言的开发速度和C或C++等编译语言的性能和安全。一位Go语言的支持者概括而言Go语言如下:简单、快速、安全、并发、快乐编程、开源;但Go语言缺乏方向以及其“集大成者”的尝试很容易会导致其学猫不成学狗也不成,沦为四不像
尽管如此,编者仍然觉得Go语言有相当大的潜力:很多开发者对它感兴趣——不仅它的最初设计者阵容强大,而且在参与修改源代码的人群中也不乏大牛级人物。这很有可能帮助Go语言找到适合自己的方向,开拓系统编程的新方向。
Go得不足:
、有点反程序员的语法,错误处理非常蛋疼,默认不携带现场信息,需要自己封装错误、没有泛型,标准库中数据结构远不如Java丰富,、依赖管理鸡肋(go mod已解决),channel如果使用不当,非常容易死锁、编译时不允许循环import,编码时很多包名会跟自定义的变量名冲突,、Java中很多认为理所当然地库,在Go中发现要重新造轮子、go get命令会clone整个git仓库,包括历史commit,、标准库不提供routine池,没有现成的Future机制,要自己通过channel实现、起新routine时一定要注意recover兜底,否则万一panic了,整个程序都挂了Java的不足:、语言表达能力比较欠缺(接地气的说法叫“又臭又长”)内存、CPU消耗大、堆内存较大时,垃圾回收器需要进行深入调优才能得到满意的回收效果;然而在一些对实时性要求高的场景下,gc可能直接就是无解, full gc一触发就是地、程序需要预热,JDK体积庞大, springboot jar包体积大(在微服务架构下问题最突出)、Spring全家桶越来越重(Spring你做好IoC AOP就够了),导致使用全家桶的应用,性能较差(可参考TechEmpower Round 14中spring的位置),但也是足够用的、因为成熟的框架、库太多,导致很多人入门时被带偏,以为编程就是调API,用框架,而对于原理知之甚少JAVA目前的问题并不在于性能,因为JIT自动优化过的代码已经跟C匹敌了。JAVA的问题是,真正实际项目里,第三方依赖太多,架构臃肿,过度设计,这时候谁快就不好说了。
与其争论语言本省*端情况下的性能到底如何,倒不如把各个实际应用中逻辑老老实实地写吧,有的地方少加几个低效的循环,必要地方用上缓存,数据库结构优化一下,提升的效率比GO和C#以及任何两门流行语言的性能差距太多了,另外如果说以稍微牺牲一点性能的代价大大提升可读性和可维护性,也是十分值得的。
程序员要讲究格局和大势,不拘小节,主流编程语言性能跟语言的地位基本一致的,就是底层语言(汇编、C/C++)>中间层高级语言(GO,Java,C#)>上层脚本语言(python,lua ,ruby....)知道这个大势就可以了,因为胎里素的原因,不会有错的
免责声明:本站所有内容及图片均采集来源于网络,并无商业使用,如若侵权请联系删除。