Java有必要转Go语言吗

可以根据情况来看是否有必要转Go语言,如果对Go语言感兴趣,并且条件允许推荐转Go语言,Go语言是一种静态强类型、编译型语言,不仅语法比Java简洁,而且性能比Java更好,编译速度更快。

Go

在并发方面, goroutine 和 channel 机制提供了语言层面的轻量级和毫无拖泥带水的并发机制;在性能方面,提供了不弱于 Java 的性能(性能是个伪命题),而内存资源消耗方面,相对 Java 和其它动态语言,具备明显的优势;在语法方面,具备了部分 Python 的动态语言特性,在对象初始化、构造和序列化等方面提供了无比简洁的表述方式,而这些处理代码可能占据 10%~50% 的代码分量,尤其对于处理数据、配置和协议映射场景,相比 C、C++、Java 在此方面拙笨,这就是动态语言为何让人着迷的关键所在。

这也是为啥 Go 语言第一个版本发布时就如此受人瞩目的关键所在,尤其是对于动态语言来说,它提供了动态语言所不具有的并发与性能优势,Pike 设计 Go 语言目的是想作为 C/C++ 的另外一个可选的角色(注意不是替换,其设计目标不是替换),Go 语言之父 Google 首席软件工程师 Pike 2012 年“大道至简”演讲稿中对于此目标充满沮丧,引用其中一句话:“Although we expected C++ programmers to see Go as an alternative, instead most Go programmers come from languages like Python and Ruby. Very few come from C++.” C++ 的价值精髓在于:语言提供更加广泛的抽象、优雅和灵活的特性,而这些表达能力是硬件零成本的,而 C 语言一开始就把硬件零成本作为其设计目的,但语言表述力是 C++ 来解决,Go 思考的方向显然不是零成本,至少不是零 CPU 成本,Go 的主张更多考虑的是最小化程序员的工作量。

一个是硬件零成本的极致追求,一个是最小化程序员的工作量,谁都替换不了谁最有价值的部分,Go 无法同时符合两个目标,它选择了动态语法和 gc,就注定了它选择开发效率,会为开发效率牺牲硬件效率,所以它走向另外一个方向,也就是 Java 所擅长的应用方向,尤其是目前的网络和 HTPP 应用方面,这就需要有良好的标准库和生态系统支持,而在标准库方面,Go 已提供了处理 tcp/http/xml/json/ 加解密等更轻量级和优秀的代码库,对网络的核心协议 http 的高并发支持,已经为它提供了撬动 Java 的敲门砖。

但是我们必须面对它目前的不足,在其语言重要特性和严谨性方面还远未成熟,还有不少断层或临时解决方案,而这也会影响到其生态的成熟度,这些问题还需要在新版本中解决。Go 语言 2012 年 3 月 28 日正式发布第一个版本,截止目前 1.7 版本发布,差不多一年两个大版本发布,中间还有数个 beta 与 RC 版本发布,这也基本能说明 Go 语言还未完全准备好。

小结

Go 已经证明在动态语言需要性能方面,是作为 Python 和 Ruby 的理想候选者;在应用开发方面,尤其是 HTTP 相关应用方面,目前已经是站在 Java 面前的一位挑战者,同时在对资源的掌控力不是那么强烈诉求的地方也是 C/C++ 之外提供另外一种角色。

在生产力方面,其语言特性和生态系统还未成熟,版本还在快速迭代中,相比动态语言和 Java,并不具有优势,目前阶段是这些语言在某些场景下的可选角色。长期看,在 Google 的鼎力支持下,新特性和库的应用能力还会不断加入,是一门欣欣向荣的编程语言,但目前阶段,建议必须控制好程序的规模和复杂度,语言和生态还未提供健全的支撑,同时还必须留意它的不成熟和版本快速迭代带来的风险。

Java

Java 的成功得益于 10 年前以 Unix 系统为主的 SUN、IBM、Oracle 等大型公司的强力支持,这让它在企业应用领域和 WEB 应用方面站稳了脚跟,而随后的 10 年,前半段是靠 x86+Linux 带来的革命继续保持份额,后半段就是 android 的成功让其在步履蹒跚停止脚步后再一次登顶。这二十年,Java 积累了最强大的生态系统,你可以说它无所不包, 毋庸置疑,Java 早已是一艘航空母舰的巨大身躯,这足已证明它的地位与成功。但是其语言、库、框架和生态系统的复杂度,对技术人员构筑其巨大的障碍,比如并发方面,语言的 synchronized 机制,标准库的 notify 再到 concurrent,也可以通过 Apache+tomcat 容器来获得 HTTP 等的并,而基于 JVM 技术,Java 又与其它语言具有良好的互操作性,比如并发方面的 Scala,可以选择其 Actor 或者也是用 Scala 写的 Akka,当然业界选择 nginx 等混搭的场景更多,太多太多…

这就是 Java 的世界,永远不嫌多,无需要重复造车马,这是 Java 成功的关键所在,历史沉淀下来的,让 Java 提供的选项太多,深入后就知道 Java 的学习成本比 C++ 更高,对程序员的要求比 C++ 更高,除非掉队了,还在用 7 年甚至 10 年前的 Java 技术,技术人员要非常精心地组织框架和设计,否则各种复用的结果就是堆砌出一个异常臃肿的程序,其运行时对资源的消耗有时候会让你感到恐惧,而这是太多的基于 Java 所开发的平台被广泛诟病的关键所在,重用是个双刃剑,需要量体裁衣而不是一锅端,拿捏的尺度对开发人员要求无疑是最高昂的,除非语言和标准库提供了最好最直接的选项。

原创文章,作者:WVHPZ,如若转载,请注明出处:https://www.beidanyezhu.com/a/26587.html

(0)
WVHPZ的头像WVHPZ
上一篇 2025-01-04
下一篇 2025-01-04

相关推荐

  • go语言可以用哪些框架

    go语言使用的框架有:1、Beego框架;2、Buffalo框架;3、Echo框架;4、Gin框架;5、Iris框架;6、Revel框架。 6款好用的go语言web框架: Beeg…

  • go语言怎么引入包

    go语言引入包的方法:可以直接使用【import "包名"】来引入一个包。如果需要同时引入多个包,可以使用【import {"包名" &qu…

    2025-01-07
  • go语言有什么开发工具

    go语言开发工具有:1、GoLand;2、LiteIDE;3、Eclipse。LiteIDE是一款开源、跨平台的轻量级Go语言集成开发环境。 开发工具介绍: 1、GoLand Go…

    2025-01-07
  • yum如何安装go语言

    yum安装go语言的方法:首先执行【yum -y install golang】命令安装go;然后编辑profile文件,配置环境变量;最后执行【source /etc/profi…

  • vscode如何配置go语言开发环境

    Golang 环境配置 1) 首先下载适合你系统的安装包 2)下载完成安装到指定目录即可。我这里是(D:\Go)。 3)配置Glang环境变量 进入我的电脑->高级设置-&g…

    2025-01-07
  • go语言defer怎么用

    go语言defer的用法:1、defer语句在函数返回之前或函数中的return语句之后执行;2、多个defer语句的执行顺序是逆序执行;3、在panic语句后的defer语句不执…

  • windows下如何搭建go语言开发环境

    windows下搭建go语言开发环境的方法:1、在官网下载go语言开发包;2、安装go语言开发包;3、设置GOPATH环境变量;4、测试go开发包是否安装成功。 具体步骤如下: 一…

    2025-01-07
  • go语言的7大优势是什么

    go语言的优势有:1、学习曲线容易;2、开发效率和运行效率高;3、自由高效;4、拥有强大的标准库;5、部署方便;6、高度支持并发性;7、稳定性高。 go语言的优势: 1、学习曲线容…

  • go语言指的是什么

    go语言是一种静态强类型、编译型语言,它的语法与C语言相近。go语言规定每行程序结束后不需要撰写分号,大括号不能够换行放置,if判断式和for循环不需要以小括号包裹。 详细介绍: …

  • go语言适合于什么领域

    go语言适用的领域有:1、服务器编程;2、分布式系统;3、网络编程;4、内存数据库;5、云平台;6、游戏服务端的开发。go语言是一种静态强类型、编译型语言。 Go(又称 Golan…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

分享本页
返回顶部