Go语言优势

Go语言设计初衷

设计 Go 语言 是为了解决当时 Google 开发遇到的问题:

  • 大量的 C++ 代码,同时又引入了 JavaPython
  • 成千上万的工程师
  • 数以万计行的代码
  • 分布式的编译系统
  • 数百万的服务器

Google 开发中的痛点:

  • 编译慢
  • 失控的依赖
  • 每个工程师只是用了一个语言里面的一部分
  • 程序难以维护(可读性差、文档不清晰等)
  • 更新的花费越来越长
  • 交叉编译困难

如何解决当前的问题和痛点?

  • Go 语言希望成为互联网时代的 C 语言。多数系统级语言(包括 Java 和 C#)的根本编程哲学来源于 C++,将 C++ 的面向对象进一步发扬光大。但是 Go 语言的设计者却有不同的看法,他们认为值得学习的是 C 语言。C语言经久不衰的根源是它足够简单。因此,Go 语言也是足够简单。
  • 所以,他们当时设计 Go 的目标是为了消除各种缓慢和笨重、改进各种低效和扩展性。Go 是由那些开发大型系统的人设计的,同时也是为了这些人服务的;它是为了解决工程上的问题,不是为了研究语言设计;它还是为了让我们的编程变得更舒适和方便。
  • 但是结合 Google 当时内部的一些现实情况,如很多工程师都是 C 系的,所以新设计的语言一定要易学习,最好是类似 C 的语言;20 年没有出新的语言了,所以新设计的语言必须是现代化的(例如内置 GC)等情况。最后根据实战经验,他们向着目标设计了 Go 这个语言。

Go语言特色

  • 没有继承多态的面向对象
  • 强一致类型
  • interface 不需要显式声明(Duck Typing)
  • 没有异常处理(Error is value)
  • 基于首字母的可访问特性
  • 不用的 import 或者变量引起编译错误
  • 完整而卓越的标准库包
  • Go 内置 go runtime(作用是性能监控、垃圾回收等)

Go语言的优势

学习曲线容易

Go 语言语法简单,包含了类 C 语法。因为 Go 语言容易学习,所以一个普通的大学生花几个星期就能写出来可以上手的、高性能的应用。在国内大家都追求快,这也是为什么国内 Go 流行的原因之一。

效率

快速的编译时间,开发效率和运行效率高

开发过程中相较于 Java 和 C++ 呆滞的编译速度,Go 的快速编译时间是一个主要的效率优势。Go 拥有接近 C 的运行效率和接近 PHP 的开发效率。

C 语言的理念是信任程序员,保持语言的小巧,不屏蔽底层且底层友好,关注语言的执行效率和性能。而 Python 的姿态是用尽量少的代码完成尽量多的事。于是我能够感觉到,Go 语言想要把 C 和 Python 统一起来,这是多棒的一件事啊。

出身名门血统纯正

之所以说 Go 出身名门,从 Go 语言的创造者就可见端倪,Go 语言绝对血统纯正。

其次 Go 语言出自 Google 公司,Google 在业界的知名度和实力自然不用多说。Google 公司聚集了一批牛人,在各种编程语言称雄争霸的局面下推出新的编程语言,自然有它的战略考虑。而且从 Go 语言的发展态势来看,Google 对它这个新的宠儿还是很看重的,Go 自然有一个良好的发展前途。

自由高效

组合的思想、无侵入式的接口。

Go 语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持。Go 语言支持当前所有的编程范式,包括过程式编程、面向对象编程、面向接口编程、函数式编程。程序员们可以各取所需、自由组合、想怎么玩就怎么玩。

强大的标准库

这包括互联网应用、系统编程和网络编程。

Go 里面的标准库基本上已经是非常稳定了,特别是我这里提到的三个,网络层、系统层的库非常实用。Go 语言的 lib 库麻雀虽小五脏俱全。Go 语言的 lib 库中基本上有绝大多数常用的库,虽然有些库还不是很好,但我觉得不是问题,因为我相信在未来的发展中会把这些问题解决掉。

部署方便

二进制文件,Copy 部署。这一点是很多人选择 Go 的最大理由,因为部署太方便了,所以现在也有很多人用 Go 开发运维程序。

简单的并发

并行和异步编程几乎无痛点。Go 语言的 GoroutineChannel 这两个神器简直就是并发和异步编程的巨大福音。像 C、C++、Java、Python 和 JavaScript 这些语言的并发和异步方式太控制就比较复杂了,而且容易出错,而 Go 解决这个问题非常地优雅和流畅。这对于编程多年受尽并发和异步折磨的编程者来说,完全就是让人眼前一亮的感觉。Go 是一种非常高效的语言,高度支持并发性。Go 是为大数据、微服务、并发而生的一种编程语言。

Go 作为一门语言致力于使事情简单化。它并未引入很多新概念,而是聚焦于打造一门简单的语言,它使用起来异常快速并且简单。其唯一的创新之处是 goroutines 和通道。Goroutines 是 Go 面向线程的轻量级方法,而通道是 goroutines 之间通信的优先方式。

创建 Goroutines 的成本很低,只需几千个字节的额外内存,正由于此,才使得同时运行数百个甚至数千个 goroutines 成为可能。可以借助通道实现 goroutines 之间的通信。Goroutines 以及基于通道的并发性方法使其非常容易使用所有可用的 CPU 内核,并处理并发的 IO。相较于 Python/Java,在一个 goroutine 上运行一个函数需要最小的代码。

稳定性

Go 语言拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性,稳定压倒一切。

那么为什么 golang 相比于其他程序会更稳定呢?这是因为 Go 提供了软件生命周期(开发、测试、部署、维护等等)的各个环节的工具,如 go tool、gofmt、go test。