展望2021,Java、Go、.NET,谁主沉浮?

简介: 展望2021,Java、Go、.NET,谁主沉浮?

伴随着年底.NET社区活动,近日跟几位微软MVP大佬聊天请益,收获颇丰。程序员都有个话题避不开,就是各编程语言的优劣,大佬们的见识既有意思也有深度,这里为大家整理一下,其中Java、Golang和.NET是讨论焦点。

Java危机四伏

25岁的Java当下还占据着“天下第一”的宝座,但是其统治地位并非坚不可摧,反倒可以说是危机四伏,当下云原生的时代,Java 体系的许多前提假设都受到了挑战:

1 Java根基“一次编写,到处运行”(Write Once, Run Anywhere)在当下已毫无优势,“一次构建,到处运行”(Build Once, Run Anywhere)的容器才是互联网需要的,程序+运行环境一起打包才是最流行的程序分发方式;

2 单个微服务不再需要面对几十/几百G的内存管理,有了高可用集群也不要求单服务7x24小时运行,Java优势无从发挥,微服务对编程语言的异构兼容,更是降低其他语言使用成本;

3 容器亲和性的要求,譬如镜像体积、内存消耗、启动速度,以及达到最高性能的时间等,都是Java的弱项!再小的Java程序也要带着完整的虚拟机和标准类库,再小Java的程序都会有固定的基础内存开销和固定的启动时间(Java虚拟机的执行机制)。

Golang光芒四射

Golang(简称Go)近些年大火特火,Docker和K8S都是基于Go开发,国外如Google、AWS、Cloudflare、CoreOS等,国内如阿里、七牛等都已经开始大规模使用Go开发其云计算相关产品。Go的优劣大概如下:

1 简单、小巧、易学,是学习Go语言最大的优势,然而无处不在的重复代码让人受伤(没有泛型、各种非空判断、各种异常处理代码),复制粘贴才是Go开发的常规套路;

2 基于goroutine协程搭建的并行编程优势明显,当下docker、k8s等云原生底层核心架构都是Go开发的,有着诸多巨头支持的Go可以预见在底层设施会有更大的发挥空间,但应用层开发上,Go还缺乏说服力产品,相关积累也不够,目前还是Java为王,.NET、PHP、Python、NodeJS等更主流一些。

image.png

.NET浴火重生

.NET在互联网方向上已经连续下行多年,直至.NET Core之后方才重新崭露头角,前不久发布了.NET5之后,吸引了众多互联网巨头的关注,算得上浴火重生!.NET5当前的优势:

1 打破一贯的闭源态度,.NET进入开源跨平台,微软官方推进社区建设,收购GitHub展示决心,Build2020更是表态全力推动社区发展,赋能程序员,国内外基于.NET Core的开源社区异常活跃,涌现了一大批优秀的开源组件;

2 .NET5的性能优势明显,全新设计理念,改写后的CLR,应用层框架不断优化,在.NET Core3.1时代已经性能霸榜,而.NET5性能更进一步;

3 当下微服务和云原生背景下,.NET5的容器感知和自适应优势,最小80M的镜像,最小22M的启动内存,毫秒级快速启动和响应,无疑是首选开发平台。

4 .NET5覆盖的应用分支多,受众体量大,经过.NET Core的几年大刀阔斧改革和.NET5终止两个分支的动作,让整个社区已经习惯了应用最新的开发版本,有利于不断进步和创新。

技术变革,谁主沉浮?

以上内容是我如实整理的大佬们的观点,在云原生时代,Go将是底层设施王者语言,而应用层开发Java危机重重,.NET5更被看好!当下是IT互联网技术的大变革之际,编程语言一家独大将不会再现,多语言融合是大势所趋,百花齐放百家争鸣可以预见,而其中,Go和.NET将是最耀眼的两颗明珠!

相关文章
|
16天前
|
Java 网络安全 Maven
Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
【10月更文挑战第26天】Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
34 2
|
4月前
|
网络协议 Java Apache
【Java】已解决java.net.HttpRetryException异常
【Java】已解决java.net.HttpRetryException异常
109 0
|
4月前
|
网络协议 Java
【Java】已解决java.net.UnknownHostException异常
【Java】已解决java.net.UnknownHostException异常
795 0
|
3月前
|
安全 Java Go
Java&Go泛型对比
总的来说,Java和Go在泛型的实现和使用上各有特点,Java的泛型更注重于类型安全和兼容性,而Go的泛型在保持类型安全的同时,提供了更灵活的类型参数和类型集的概念,同时避免了运行时的性能开销。开发者在使用时可以根据自己的需求和语言特性来选择使用哪种语言的泛型特性。
49 7
|
3月前
|
算法 Java 测试技术
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
|
3月前
|
Java 开发工具 Spring
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
|
4月前
|
开发框架 安全 Java
.net和java有什么样的区别?
Java和.NET在本质、编程语言、生态系统与工具、跨平台性、应用领域、性能与效率以及安全性与可靠性等方面都存在明显的区别。选择哪个平台取决于具体的需求、技术栈和目标平台。
305 7
|
3月前
|
网络协议 Go
go的net/http有哪些值得关注的细节?
go的net/http有哪些值得关注的细节?
|
3月前
|
Rust JavaScript Java
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
|
4月前
|
Go
Go中 net/http 使用
Go中 net/http 使用
27 0