Go与Java(1)

394 阅读6分钟

零.GoApi文档和中文社区网址

 

Go的中文api文档:studygolang.com/pkgdoc

Go中文社区网站:studygolang.com/

 

一.关于Java

1.Java的用途

首先我们来回顾下Java的主要用途和应用场景:  

用途一:服务器后端系统开发(web后端、微服务后端支付系统、业务系统、管理后台,各种后台交互的接口服务)。

用途二:大数据框架的底层实现和Java的API支持。(Hadoop)。  

用途三:其它中间件的底层开发。(Tomcat、RocketMq、Hbase、Kafka(部分)、SpringCloud,Dubbo...)。

2.Java的优势和特点

那我们看Java语言有什么优势和特点呢?

*.做服务端系统性能高。

*.有虚拟机,跨平台。 

*.功能强大,支持的类库多,生态圈类库多,开发框架和工具更易找。

*.市场占有率高,约60%的中国程序员都是做Java相关的工作。

 

二.关于Go

1.Go的出生原因

Go语言是Google内部公司大佬开发的,主要起因于Google公司有大量的C程序项目,但是开发起来效率太低,维护成本高,于是就开发了Go语言来提高效率,而且性能只是差一点。

(Go是2007年开始研发,2009推出发布)

2.宏观看Go与Java的差异

接着,我们来看一下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)。  

3.Go和Java的语言类型区别

​ 计算机编程语言按照运行的方式可以分为编译型编程语言和解释型编译语言。

​ 我来举一个例子,你要教别人一门沟通交流的语言,比如英语。

​ 编译型的教的方式就是录(这里的录相当于计算机中把程序编译成二进制可执行文件)一个视频课程,语音课程,把每一句英语发音录下来,这样学生学的时候只要播放你的录音,然后跟着读就行,你只需要录制一次,学生就可以无数次听。  

​ 解释性的教的方式就是你亲自到学生家里给他补习,你当面教他,你读(读相当于每次执行都重新用解释器解释一遍)一句他学一句,

这样的话,你想要教他一句你必须就得先读一句,每次教都得重新一遍一遍的读。  

​ 这两种教学方式还有一个差别,你录(编译)视频语音教他,你录的英语他就只能学英语,空间环境一变,他现在要去日本,要学日语,你的视频语音教程因为已经录好了,是英语类型(英语类型类比操作系统类型)的,所以,你就得再录一套日语的语音教程。

​ 而现场教他,你也会日语的话,你只需要读(读相当于解释器解释)日语给他听,让他学就行了,是不用考虑语言环境(操作系统类型环境)不同的问题的。  

​ 现在我们再来看编程语言,我们的程序执行有两种方式,一种是编译成操作系统可执行的二进制可执行程序,这样相当于编译一次,之后每次执行都不用再编译了,但是因为不同操作系统对于二进制文件的执行规范不同,不同的操作系统你要编译成不同的可执行文件。  

​ 解释型语言就是多了一个解释器,解释器我们可以类比为一个老师,你执行一行代码我们类比为学一句话的读音,解释器解释一句,就是老师先读一句,你跟着才能读一句,也就是解释器每解释一行代码为可运行的代码,操作系统执行一行代码,这样的话每次执行都需要解释器重新解释一遍,执行几次就得解释几次。  

​ Go是编译型的语言,运行在不同的平台需要打包成不同操作系统类型下的可执行文件。

​ Java是半编译,半解释型语言。编译是指他的代码都会编译成class类型的文件,class类型的文件只需要编译一次,可以在不同的操作系统的Java虚拟机上执行 ,半解释是指在Java虚拟机中,他还是需要一句一句的将class的二进制代码解释成对应操作系统可执行的代码。  

4.Go语言目前的主要应用场景

*.和Java一样,Go语言最多的应用场景就是服务器后端系统的开发,包括Web后端,微服务后端接口。

*.Go非常适用需要高性能高并发的网络编程,这里的网络编程是指不需要界面,底层只是用Socket相互传输数据的系统,类似于Java中Netty的用途。

*.一些云计算容器,比如Docker,K8s,底层就是Go语言开发的,也可以用做底层自研运维项目的开发。  

*.一些游戏系统的开发,可以用Go语言。

*.区块链的一些底层软件和一些应用软件。(区块链程序的第一开发语言)