Kotlin是一个跨编译平台的语言。
现在我们比较熟悉的是JVM平台的Kotlin/JVM,但实际上还有Kotlin/javascript和正在开发的Kotlin/Native。
对不同编译平台的Kotlin来说,各方面差异比较大,所以在此分开讨论。
先讲讲大家最熟悉的Kotlin/JVM。
go语言的设计理念与Java是不同的,go语言的工具都更倾向于轻量级,go语言的函数定义得精确简单(多值返回是个好东西),go语言的协程消耗小性能高(甩Java几条街)。这决定了go语言更适于高性能服务器领域,其目标应该是原来用Java或C/C++写的那些负荷比较大的服务器。
但与JVM提供的丰富的工具和功能完善的框架相比,go语言也是会显得有些麻烦的。但go语言还年轻,成熟的工具链和框架在未来会越来越完善,也许成为服务器端首选语言也说不定。
而个人认为,Kotlin/JVM的出现就是为了能够让Kotlin能够继承Java的丰富资源。Kotlin/JVM基本上就是一个充满语法糖的Java,它让原来Java程序的开发效率大大提升了,但是性能和相关特性始终是无法逾越JVM的。
所以可以说,在服务器领域,go是革命派,而Kotlin/JVM是改良派。孰是孰非就看时代了。
对于Kotlin/javascript,个人认为它的出现是为了完善Kotlin的跨领域性。因为Kotlin设计的一个初衷就是希望它成为跨各个领域的语言,能被用在各个地方。而Kotlin/javascript就实现了在脚本上使用Kotlin的愿望。它的首要目标应该是网页开发吧(虽然听说也有对nodeJS的支持但我觉得真不应该用它写服务器),所以在此跟go风马牛不相及,就不深入讨论了。
至于Kotlin/Native嘛。我感觉这恐怕是Jetsbrains的Kotlin宏伟计划中的重要部分了,Kotlin/Native的表现将直接决定这门语言将来是被钉死在JVM上还是飞越成为王牌级语言。要知道Kotlin/Native可是同时盯着IOS开发、科学计算领域、游戏开发领域和嵌入式去的!
Kotlin/Native和go之间的差异嘛:现在已知的是Kotlin的语法更倾向于魔幻型的,而go的更倾向于朴素型的。另外据说Kotlin/Native将采取在不同平台上分别采用不同的内存管理机制,这意味着Kotlin在内存方面的能力将可能优于go语言。另外,三个Kotlin编译平台将可以实现某些库的共用,这意味着在库依赖方面Kotlin也会比go要有差异(go语言的想法是不要依赖库,所以在此不妄做评判)。
但Kotlin/Native尚处于开发的初期阶段,正式版可能还要过一年才能出,说什么都为时尚早啦。
所以总地说,go应该是死盯服务器领域了,而Kotlin则是什么领域都想占领。现在服务器领域应该还大多用JVM(服务器求稳为主,更新迭代慢),未来是什么样就不知道嘞……
最后还是想说,各个语言其实都是术业有专攻的啦。把任何两个语言相比较都是没法说个谁一定好谁一定坏的。找到一门自己写得舒服顺手的语言就好。(我喜欢Kotlin)