Go 语言与 Java 性能比较。

JAVA目前的问题并不在于性能,因为JIT自动优化过的代码已经跟C匹敌了。

JAVA的问题是,真正实际项目里,第三方依赖太多,架构臃肿,过度设计,这时候谁快就不好说了。

我个人认为,因为go基本上只需要标准库就足够了,实际工程中的性能表现要好于JAVA(Go的协程本质也是一种异步IO模型,Go语言: 万物皆异步),除此之外,资源占用也是性能的一部分,显然go内存占用更小,CPU消耗相对低。

GO语言的亮点很明显

    • GoDoc。 GoDoc的静态语言分析能力很强大,可以直接从代码和注释生成漂亮的文档。这一点区别于其他的类似工具如JavaDoc, PHPDoc或者JSDoc。这些工具需要添加额外的注解,比较麻烦。
    • GoFmt。代码格式化一直是程序员编码的痛点,主要的困境在于没有统一的标准,Go通过内置的GoFmt工具来解决这个问题。
    • GoLint。代码语法提示也在Go中通过GoLint工具进行了统一。
    • 测试框架内置。这一点区别于其他的流行语言如Java, C#, Javascript,他们需要选择测试框架进行测试代码编写。而Go语言直接内置了测试框架,可以程序员快速生成测试框架代码,省时,省力。
    • GoRoutines的并行化处理能力。Go对于并行化的支持做得非常彻底。直接把繁琐的线程创建封装起来,程序员无需担心线程创建中可能遭遇的硬件资源不足的问题。
    • 使用Interface支持多态。在Go语言中省去了面向对象编程中父类继承的特征。在使用多态的地方使用Interface的模式实现多态,这样把代码结构线性化、平行化,从而降低了代码的复杂度。

GO语言的缺点:

1.异常和错误处理啰嗦。如果你习惯了使用异常处理,那么你就会很讨厌Go里面的错误处理方式

  • 你定义一个Go函数,返回一个错误;
  • 调用这个函数时,你要判断返回错误是否为空;
      • 然后判断是哪种错误
      • 根据哪种错误进行相应的处理
  • 这样的处理实在是啰嗦

2.空值判断

  • 在Go中指针类型可以是空,如果一个函数返回指针,在Go中,你需要进行上述第一条所说的啰嗦的错误处理,然后才可以使用指针。否则,如果这个指针为空,你使用它的话,会Crash。

3.作用域的限定比较另类

  • 大写字母开头可以全局访问,小写字母开头只能在当前文件可见。
  • Go语言假定每个程序员都清楚the whole picture, 这在实际工作场景中是不现实的。
  • 为了践行防御性编程理念,在Go中,不同程序员不得不创建大量的文件和目录。这样也不利于管理。

4.Go语言缺乏不可改写机制

展开阅读全文

本文系作者在时代Java发表,未经许可,不得转载。

如有侵权,请联系nowjava@qq.com删除。

编辑于

关注时代Java

关注时代Java