周末闲话: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(作用是性能监控、垃圾回收等)

语法对比

 

功能JavaGO
封装 class 关键字组织对象,所有方法和字段都定义在类内 struct 关键字组织对象,struct内可以有字段和方法(方法组织形式不是字节在struct内声明),也允许方法和字段脱离方法之外,这些方法属于包|
函数重载 允许函数重载 Go上不允许函数重载,必须具有方法和函数的唯一名称
多态 Java通过类继承或接口来实现多态 Go 只能通过接口来实现多态
继承 支持 不支持。Go语言的继承通过匿名组合完成,基类以Struct的方式定义,子类只需要把基类作为成员放在子类的定义中
访问权限 支持public、protected、private、默认等几种权限 通过大小写控制包外可访问还是不可访问
值引用和地址引用 基础类型是值引用,其他对象是地址引用 所有对象默认是值应用,在对象前加&表示地址引用
接口 提倡先定义,后实现 Duck typing方式,在使用时抽象出接口,有点先实现后抽象。Go 的 interface 写起来更自由,无需显式实现,只要实现了与 interface 所包含的所有函数签名相同的方法即可。

posted on 2020-12-26 15:01  Code2020  阅读(1993)  评论(0编辑  收藏  举报