1. Go 语言产生的背景
C/C++ 的发展速度没有跟上计算机发展的脚步,十多年来也没有出现一门与时代相符的主流系统编程语言。为了解决这一问题,Google 开发了一门新的编程语言 – Go 。
Google 当时的现状:
- 项目中主要使用C++,也有 Java 和 Python
- 开发人员众多
- 代码量大
- 分布式编译
- 服务器数量达百万级别
Google 当时面临的问题:
- 编译慢
- 依赖复杂
- 每个工程师只用了一个语言的一部分特性
- 代码难以维护,可读性差,文档不清晰
- 变更功能的成本越来越大
- 交叉编译困难
Google 设计 Go 的初衷是为了消除各种缓慢和笨重、改进各种低效和扩展。Go 主要面向的是开发大型系统的人,强调解决工程问题。
2007 年 Google 发起 Go 项目,2009 年开源项目,2012 年发布第一个正式版本,之后每半年一个版本。在 Google 内部,一开始 Go 作为一个 20% 的项目运作,也就是员工利用 20% 的空余时间来参与开发。
Go 项目的三位主要领导者对系统编程语言、操作系统和并行都有着深刻理解:
- Rob Pike,Unix、UTF-8、Plan9 的作者
- Ken Thompson,B语言、C语言的作者、Unix之父。
- Robert Griesemer,参与开发 JavaScript 执行引擎 V8,Java HotSpot 虚拟机等。
这样强大的创始团队阵容,再加上 Google 制造的光环 ,给 Go 项目带来了极高的人气。
2. Go 语言的适用场景
Go 适用的一些场景:
- 服务器编程,处理日志、数据打包、虚拟机处理、文件系统等
- 分布式系统,数据库代理、中间件等
- 网络编程,Web 应用、API 应用、下载应用、游戏后端等
- 海量存储,Influxdb、Tidb 等
- 云平台,CloudFoundry 等
使用 Go 的国外公司有 Google、Docker、Apple、Cloud Foundry、CloudFlare、Couchbase、CoreOS、Dropbox、MongoDB、AWS 等。
使用 Go 的国内公司有头条、阿里云 CDN、百度、小米、七牛、PingCAP、华为、金山软件、猎豹移动、饿了么等。
3. Go 语言的特点
Go,又称 Golang,是 Google 开发的一种静态强类型、编译型,并发型,并具有垃圾回收功能的编程语言。Google 的很多工程师都是 C 系的,所以 Go 和 C++、Java 、C# 一样属于 C 系。
在声明和包的设计方面,Go 受到 Pascal、Modula 和 Oberon 系语言的影响;在并发原理的设计上,Go 从同样受到 Tony Hoare 的通信序列进程 CSP 理论影响的 Limbo 和 Newsqueak 的实践中借鉴了一些经验,并使用了和 Erlang 类似的机制。
Go 语言的优点:
- 部署简单,编译之后是一个静态可执行文件,除了 glibc ,没有其他外部依赖
- 并发性好,Goroutine 和 Channel 从语言层面支持并发,编写高并发的应用不需要考虑锁机制,以及由此带来的各种问题
- 良好的语言设计,自带完善的工具链,例如 gofmt 可自动排版代码
- 执行性能良好,适合编写瓶颈业务,非常节省内存
- 丰富的标准库,内置大量的库,可以直接使用