01.Go-开篇综述
1.1 语言介绍
Go 语言由谷歌(Google)公司于 2009 年正式对外发布,设计 Go 语言的初衷都是为了满足 Google 公司的需求。主要目标是“兼具 Python 等动态语言的开发速度和 C/C++等编译型语言的性能与安全性”,旨在不损失应用程序性能的情况下降低代码的复杂性,具有“部署简单、并发性好、执行性能好”等优势。最主要还是为了并发而生,并发是基于
goroutine
的,goroutine
类似于线程,但并非线程,可以将goroutine
理解为一种轻量级线程。Go 语言运行时会参与调度goroutine
,并将goroutine
合理地分配到每个 CPU 中,最大限度地使用 CPU 性能。
1.2 作者介绍
从左到右分别是 :
-
罗伯特·格瑞史莫(Robert Griesemer): 曾为谷歌的 V8 JavaScript 引擎和 Chubby 开发代码
-
罗勃·派克(Rob Pike): 罗布·派克是 Unix 的先驱,是贝尔实验室最早和 Ken Thompson 以及 Dennis M. Ritche 开发 Unix 的猛人,UTF-8 的设计人。还是 1980 年奥运会射箭的银牌得主。
-
汤普逊(Ken Thompson): Ken Thompson 图灵奖得主,C 语言前身 B 语言的作者,Unix 的发明人之一, 操作系统 Plan 9 的主要作者。 共同开发了 UTF-8。
1.3 Go 语言特点
Go 语言,作为编程语言的后生,站在巨人的肩膀上,吸收了其他一些编程语言的特点。下面简单解释一下:
-
拥有编译器很方便
自带编译器可以检测出你犯的所有低级错误,如:变量名拼错,不要小看这种问题,没有编译器情况下,很可能浪费掉很长时间去排查,并且非常不容易发现,而且
Go语言
也是跨平台编译的,你可以在 Mac 电脑上,编译出linux
或者windows
的目标程序。 -
开发速度
Go 是一个非常简单的语言,上手容易,无论你是小白还是老鸟,都会比其他语言 C/C++ 和 Java 等语言要容易很多,这点在做项目中体现得尤其明显。很多人可能会说那 python 呢,php 呢?从语言上说 python 和 php 他们没有编译检查,同样也会像上面说的出一些小的低级错误,或者运行时错误,这都给 php 和 python 带来了隐患,所以 Go 语言虽然牺牲了一点点代码书写的时间,但是从项目运行安全角度来说,已经非常值得了。
-
天生高并发
Go 语言就是为高并发而生的。当你需要使用并发场景,如果你有其他语言基础,第一反应是用到锁,但是 Go 语言提供了更加方便的方式协程+通道,在 Go 语言中代码不用修改就能直接多协程运行,只要在调用的时候加入 go 关键字,就可以了,非常方便。这与其他语言截然不同,你要考虑哪里开辟新的线程,哪里是代码执行逻辑。
-
部署简单
Go 语言最终执行就是一个二进制文件,包括了它所依赖的程序包,这让开发者不用考虑部署环境的问题,例如,如果你是 java 程序,要考虑执行你的程序,对方机器是否安装了 java 的运行环境,其他语言同理,如果对方机器没有安装,无法运行你的程序,Go 语言可以在 Mac 和 Linux 上交叉编译你的代码,将其拷贝到远程服务器上,然后就可以任其运行了。
1.4 Go 语言能做什么
Go 的优点:实现快 + 资源占用低 + 任意环境随便跑,综合考虑在很多场景十分好用 。
-
Go 适合造轮子,哪个库不好用就自己造。
-
Go 适合写工具,比如 hugo 、hub,还有国人写的 linux 下的百度 pan client 都是 go 实现的。
-
Go 适合实现 C/C++ 一部分业务,Java 的大部分业务。
-
Go 适合做最外层的胶水,通过 RPC/REST/CGO 粘合不同语言的模块,而在这个胶水层还可以实现各种业务逻辑,又不用像 shell/python/node 有诸多顾虑和局限。
-
Go 提供了协程、指针、 unsafe, cgo 加上 C/C++ 兼容的内存布局和跨平台的汇编,有了这些你能做很多事情了。
所以问题不是它适合做什么,是你有能力用它做什么。
1.5 哪些公司在使用 Go
这个问题之前 Go 的官方 wiki 里面有一个维护列表,大家可以点击下面地址看到:
https://github.com/golang/go/wiki/GoUsers
在 stackshare 里面可能更加直接的看到一些使用 Go 的国外企业列表:
- Uber
- Shopify
- Slack
- ...
国内使用 Go 的企业也非常的多:
- 腾讯
- 阿里巴巴
- 百度
- 字节跳动
- BiliBili
- 小米
- 163Cloud
- PingCAP
- 积梦智能
- .....