Java和Go都在用,goroutine是加分项,但绝对不是决定性因素,甚至连重要因素都算不上。简单对比一下我看中的几个点。
打包大小
不算JRE,Java一般20M以上,JVM平台其它语言往往还有10M这个量级的运行库
Go没有GRE,strip之后一般不到10M,绝大部分情况下可以控制在20M以内
这点Go完胜Java以及JVM上其它语言,一个JRE大小就顶几个Go项目了。
内存占用
JVM有VM和JIT的开销,对某些设备不友好,如树莓派
Go整体上比JVM语言省内存,省的还不少
树莓派这类性能低的设备,和低端VPS,Go比Java合适很多
工具链
Maven / Gradle依赖管理和build控制,比Go那些要强的多
IDE和调试工具,目前也是JVM方案更丰富和完备 国内Mavan镜像很多
这点Java完胜
语言特性
Java有范型,有异常,有Swing/JavaFX,有极其丰富的开源库
Go有goroutine,JVM也有Actor(Scala)和Coroutine(Kotlin)
实现同样的功能,Go的代码行数并没有减少
Go不用加密代码,Java的class反汇编后约等于源码
性能两者差不多,JVM提供了更多的GC算法和微调参数
语法层面,Go是不如Java的,远不如Scala或者Kotlin,仅凭goroutine一点,不足以选择。况且大部分项目根本不需要goroutine,无脑开几百几千线程也能搞定。或者安排线程池。
职位供求
Java开发人员数量,比Go高一个数量级
Java招聘职位,比Go多一个数量级
从就业和雇佣双方来看,Java都要合适的多。
所以我能用Java(Kotlin)的地方,都用了Java(Kotlin),极少情况下才用Go。我记得之前看过一个报告,Python/PHP/Ruby转Go的比较多,JVM转Go的比较少,毕竟没有性能提升,换一个写起来更罗嗦的语言是没有道理的。