Go 是一门编译型的和静态的编程语言,诞生于谷歌研究院。

1 特性

  • 内置并发编程支持:
    • 使用协程(goroutine)做为基本的计算单元。轻松地创建协程。
    • 使用通道(channel)来实现协程间的同步和通信。
  • 内置了映射(map)和切片(slice)类型。
  • 支持多态(polymorphism)。
  • 使用接口(interface)来实现裝盒(value boxing)和反射(reflection)。
  • 支持指针。
  • 支持函数闭包(closure)。
  • 支持方法。
  • 支持延迟函数调用(defer)。
  • 支持类型内嵌(type embedding)。
  • 支持类型推断(type deduction or type inference)。
  • 内存安全。
  • 自动垃圾回收。
  • 良好的代码跨平台性。
  • 自定义泛型(从 Go 1.18 开始)。

2 亮点

  • 语法很简洁
  • 拥有一个比较齐全的标准库,这个标准库提供了很多常用的功能。
  • Go 拥有一个活跃和回应快速的社区。社区贡献了大量高质量的第三方库包和应用
  • Go 属于编译型的静态语言。但是 Go 的很多特性使得用 Go 编程像使用动态脚本语言一样的灵活。
  • 可读性是在 Go 语言的设计中一个非常重要的考虑因素。一个 Go 程序员常常可以轻松读懂其他 Go 程序员写的代码。

3 编译器

目前,使用最广泛的 Go 编译器由 Go 官方设计和开发团队维护。以后我们将称此编译器为标准编译器。标准编译器也常常称为 gc(是 Go compiler 的缩写,不是垃圾回收 garbage collection 的缩写)。 Go 官方设计和开发团队也维护着另外一个编译器,gccgo。 gccgogcc 编译器项目的一个子项目。 gccgo 的使用广泛度大不如 gc,它的主要作用是做为一个参考,来保证 gc 的实现正确性。目前两个编译器的开发都很活跃,尽管 Go 开发团队在 gc 的开发上花费的精力更多。

gc 支持跨平台编译。比如,我们可以在 Linux 平台上编译出 Windows 程序,反之亦然。

使用 Go 编写的程序常常编译得非常快。编译时间的长短是开发愉悦度的一个重要因素。编译时间短是很多程序员喜欢 Go 的一个原因。

Go 程序生成的二进制可执行文件常常拥有以下优点:

  • 内存消耗少
  • 执行速度快
  • 启动快

很多 C 家族语言,比如 C/C++/Rust 等,也拥有上述的优点。但它们缺少 Go 语言的几个重要优点:

  • 程序编译时间短
  • 像动态语言一样灵活
  • 内置并发支持