周末闲话:GO语言和java语言之间的对比联系
直接夸一波Go语言
GO作为编程界的小鲜肉。进年来Go社区非常的活跃,高并发能力无人能及。即具有像Python一样的简洁代码、开发速度,又具有C语言一样的执行效率,优势突出。
还是从根本去了解Go语言吧
1、设计Go语言是为了解决当时Google开发遇到的问题:
- 大量的C++代码,同时又引入了Java和Python
- 成千上万的工程师
- 数以万计行的代码
- 分布式的编译系统
- 数百万的服务器
2、Google开发中的痛点:
- 编译慢
- 失控的依赖
- 每个工程师只是用了一个语言里面的一部分
- 程序难以维护(可读性差、文档不清晰等)
- 更新的花费越来越长
- 交叉编译困难
3、如何解决当前的问题和痛点?
- Go希望成为互联网时代的C语言。多数系统级语言(包括Java和C#)的根本编程哲学来源于C++,将C++的面向对象进一步发扬光大。但是Go语言的设计者却有不同的看法,他们认为值得学习的是C语言。C语言经久不衰的根源是它足够简单。因此,Go语言也是足够简单。
- 所以,他们当时设计Go的目标是为了消除各种缓慢和笨重、改进各种低效和扩展性。Go是由那些开发大型系统的人设计的,同时也是为了这些人服务的;它是为了解决工程上的问题,不是为了研究语言设计;它还是为了让我们的编程变得更舒适和方便。
- 但是结合Google当时内部的一些现实情况,如很多工程师都是C系的,所以新设计的语言一定要易学习,最好是类似C的语言;20年没有出新的语言了,所以新设计的语言必须是现代化的(例如内置GC)等情况。最后根据实战经验,他们向着目标设计了Go这个语言。
4、Go语言的特色:
- 没有继承多态的面向对象
- 强一致类型
- interface不需要显式声明(Duck Typing)
- 没有异常处理(Error is value)
- 基于首字母的可访问特性
- 不用的import或者变量引起编译错误
- 完整而卓越的标准库包
- Go内置runtime(作用是性能监控、垃圾回收等)
语法对比
功能 | Java | GO |
---|---|---|
封装 | class 关键字组织对象,所有方法和字段都定义在类内 | struct 关键字组织对象,struct内可以有字段和方法(方法组织形式不是字节在struct内声明),也允许方法和字段脱离方法之外,这些方法属于包| |
函数重载 | 允许函数重载 | Go上不允许函数重载,必须具有方法和函数的唯一名称 |
多态 | Java通过类继承或接口来实现多态 | Go 只能通过接口来实现多态 |
继承 | 支持 | 不支持。Go语言的继承通过匿名组合完成,基类以Struct的方式定义,子类只需要把基类作为成员放在子类的定义中 |
访问权限 | 支持public、protected、private、默认等几种权限 | 通过大小写控制包外可访问还是不可访问 |
值引用和地址引用 | 基础类型是值引用,其他对象是地址引用 | 所有对象默认是值应用,在对象前加&表示地址引用 |
接口 | 提倡先定义,后实现 | Duck typing方式,在使用时抽象出接口,有点先实现后抽象。Go 的 interface 写起来更自由,无需显式实现,只要实现了与 interface 所包含的所有函数签名相同的方法即可。 |