语法对比

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

并发包对比

功能 java go 简单对比
上下文Context 上下文 context.Context
是用来设置截止日期、同步信号,传递请求相关值的结构体。与 Goroutine 密切配合,实现多并发Goroutine协同
java的Spring框架中含有ApplicationContext是最接近go的Context的概念。但是ApplicationContext不负责同步信号以及多线程之间的协同
互斥锁 隐式互斥锁实现关键字sychronized, 显式互斥锁实现ReentrantLock 对应java ReentrantLock的实现 Mutex java隐式锁实现关键字sychronized是java独有的,go中无对应实现。 Go认为如果需要重入锁,就说明代码可以优化,如果非要实现可重入锁,只需要在mutex基础上记录GorutineId进行区别即可。
读写锁 ReadWriteLock RWMutex 实现原理基本一致。都是在锁的基础包装当前锁的读写状态实现读并发,写互斥控制
并发等待 CountDownLatch WaitGroup 允许一个或多个线程等待其他线程完成操作。都是通过信号量方式实现多并发之间的协作
一次性并发执行控制 Once 这个可以理解为懒加载单例。java没有在原生并发包对这种事项场景进行封装
线程同步 Condition接口 Cond 可以看成显式信号量机制,为开发者提供控制并发之间实现协同的方式