go语言和java的区别是什么
来源:亿速云
时间:2023-03-03 13:40:34 430浏览 收藏
本篇文章给大家分享《go语言和java的区别是什么》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。
本篇内容主要讲解“go语言和java的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go语言和java的区别是什么”吧!
区别:1、Go不允许函数重载,java允许;2、Java默认允许多态,Go没有;3、Go用HTTP协议进行路由配置,java不是;4、Go代码可以自动扩展到多个核心,而Java并不总是具有足够的可扩展性;5、Java对象的方法会有隐藏this指针传递,Go没有;6、Java不支持多继承,Go支持多继承;7、GO采用的是非侵入式接口,而java不是。
一、关于Java
1、Java的用途
首先我们来回顾下Java的主要用途和应用场景:
用途一:服务器后端系统开发(web后端、微服务后端支付系统、业务系统、管理后台,各种后台交互的接口服务)。
用途二:大数据框架的底层实现和Java的API支持。(Hadoop)。
用途三:其它中间件的底层开发。(Tomcat、RocketMq、Hbase、Kafka(部分)、SpringCloud,Dubbo...)。
2、Java的优势和特点
做服务端系统性能高。
有虚拟机,跨平台。
功能强大,支持的类库多,生态圈类库多,开发框架和工具更易找。
市场占有率高,约60%的中国程序员都是做Java相关的工作。
二、关于Go
1、Go的出生原因
Go语言是Google内部公司大佬开发的,主要起因于Google公司有大量的C程序项目,但是开发起来效率太低,维护成本高,于是就开发了Go语言来提高效率,而且性能只是差一点。
(Go是2007年开始研发,2009推出发布)
2、宏观看Go与Java的差异
无虚拟机,不跨平台(这里的平台指操作系统)(可以运行多个平台,每个平台打不同的二进制程序包),需要打包编译成对应服务器操作系统版本(windows/linux)的可执行程序(比如windows是exe)。(注:说go跨平台的是指32位和64位相同操作系统之间的跨平台)
因为Go程序直接打包成操作系统可执行的文件,没有虚拟机在中间转换的一层,所以理论上执行效率会更高(理论上更高,实际情况需具体分析)。
相比Java的语言和代码编写风格,Go更简洁,可以用更少的代码实现同样的功能。
Go语言底层也是C实现的,又做了高并发的设计(Java出生时(1995)还没有多核cpu,所以他的并发支持后来添加上去的,Go(2009)出生时已经有了多核cpu的电脑,它在设计语言时就考虑了充分利用多核cpu(英特尔2005首次推出多核)的性能),所以性能高,高并发的支持(高并发支持其中指的一个就是充分利用多核cpu的性能资源,比如go程序默认使用所有cpu(除非自己设置使用多少))也好。
天然的适用一些特定系统的开发,比如区块链类系统(如以太坊底层系统、以太坊上层应用程序),云计算和容器(Docker,K8s底层都是go开发的)开发的(大公司自研运维管理项目也大多是用go做底层的开发),网络编程(类似于java的Netty)。
三、Go语言和Java的具体区别
1、函数重载
Go上不允许函数重载,必须具有方法和函数的唯一名称。java允许函数重载。
2、多态
Java默认允许多态。而,Go没有。
Java中的多态实现遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。Java中的多态可以通过基于继承和基于接口两种方法实现。
而在go语言一般不允许不同类型的赋值,即不支持传统的多态。interface是一个例外,可以用不同类型进行赋值只要一个类型实现了该接口,我们就可以将该类型的变量赋给该接口的变量。
3、路由配置
Go语言使用HTTP协议进行路由配置;而java使用Akka.routing.ConsistentHashingRouter和Akka.routing.ScatterGatherFirstCompletedRouter进行路由配置。
4、可扩展性
Go代码可以自动扩展到多个核心;而,Java并不总是具有足够的可扩展性。
5、对象传递:
Java中对象的方法会有隐藏的this指针传递,而Go语言中面向对象只是换了一种语法形式来表达,没有隐藏的this指针,即方法施加的目标显示传递,没有被隐藏。另外方法施加的目标不一定是指针(java传递的是指向对象的指针),如果是指针也可以不命名为this。
6、继承:
Java的继承通过extends关键字完成,不支持多继承。Go语言的继承通过匿名组合完成:基类以Struct的方式定义,子类只需要把基类作为成员放在子类的定义中,并且可以通过调整基类成员的位置改变内存布局,支持多继承。
7、接口:
java中的接口作为不同组件中的契约存在,是强制的,类必须声明实现了某接口,需要从该接口继承。哪怕是两个一模一样的接口但只有名字不一样,也只能根据类所声明的实现接口是否包括该接口来决定该类是否实现该接口,叫做“侵入式”的接口。
而GO语言中采用的是非侵入式接口,一个类只需要实现接口要求的所有函数,那我们就说该类实现了该接口。GO语言可以通过接口进行接口查询(接口指向的对象是否实现了另外的接口),类型查询等。
到此,相信大家对“go语言和java的区别是什么”有了更深的了解,不妨来实际操作一番吧!这里是golang学习网,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
以上就是《go语言和java的区别是什么》的详细内容,更多关于golang的资料请关注golang学习网公众号!
-
185 收藏
-
387 收藏
-
435 收藏
-
130 收藏
-
479 收藏
-
451 收藏
-
311 收藏
-
408 收藏
-
317 收藏
-
323 收藏
-
490 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习