01.Go语言-开篇综述
第 1 章 开篇综述
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 语言提供了更加方便的方式<font color=red>协程+通道</font>,在 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
- 积梦智能
- .....
相关文章
- Go语言内建方法之len、cap、close (十六)
- Go语言并发之并发实现、多核CPU设置、多协程间的通信、select、多协程间的同步(二十一)
- 4.Go语言项目操作之NSQ分布式消息队列实践
- 5.Go语言项目操作之Kafka日志收集项目实践
- 基于 Go 语言开发的监控系统
- 2022-08-01:以下go语言代码输出什么?A:panic;B:5;C:6;D:编译错误。
- 2023-01-09:以下go语言代码输出什么?A:+Inf; B:zero; C:something else; D:doesn‘t compile。 pac
- 2023-01-09:以下go语言代码输出什么?A:+Inf; B:zero; C:something else; D:does
- ChIP-seq 分析:GO 功能测试与 Motifs 分析(12)
- Go-包管理-go get(一)
- 在Windows上安装Go语言开发包
- Go语言复数
- Go语言sync.Map(在并发环境中使用的map)
- Go语言continue(继续下一次循环)
- Go语言服务端处理HTTP、HTTPS请求
- Go语言函数值传递和引用传递
- Go语言函数的底层实现
- Go语言与Linux:全新的开发环境体验(go语言linux)
- Go语言搭建Oracle数据库快速连接方法(go语言连接oracle)
- 新技术Go语言解析Oracle数据库日志(go解析oracle日志)
- 前行不止Go语言监听Oracle日志(go监听oracle日志)
- ODBC数据驱动程序连接Oracle数据库Go语言之旅(go使用oracle)
- 程序Go语言调用Oracle数据库驱动程序指南(go oracle驱动)
- Go语言中的流程控制结构和函数详解
- GO语言延迟函数defer用法分析