简介
Go是一门开放源码的编程语言,可容易的构建简单、可靠和高效的软件
历史
Go语言是由谷歌的开发工程师(罗伯特·格瑞史莫、罗勃·派克、肯·汤普逊等)于 2007 年开始设计,利用20%的自由时间开发的实验项目,并于 2009 年以BSD-style授权(完全开源)首次公开发布,于 2012 年正式发布。
创造
开发者使用编程语言的三大分类(执行速度、简易程度、开发难度):
- 执行速度快、编译速度慢(编译型):C,C++
- 执行速度较慢、编译速度快(解释型): JAVA,.NET
- 执行速度慢、开发难度小(动态语言[脚本]):Python,PHP
编译型
简单理解,编译器就是一个“翻译工具”,就像将我们写入的代码经过一套复杂的过程转换成二进制文件或者汇编语言等方式。大致包括词法分析、语法分析、语义分析、性能优化、生成可执行文件等五个步骤,期间涉及到复杂的算法和硬件架构
解释型
解释器与编译型类似,有兴趣的可以查阅《编程原理》
动态脚本
动态语言是在运行时才确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型
历程
作为IT人员,我们一定对google不陌生吧? 在我们遇到疑难问题解决不了时,经常会想起谷歌公司的一个搜索引擎来帮助我们排查问题的,也许刚入行的人不太清楚,谷歌的工作方式与中国的传统行业工作方式不太一样,他们追求工作的高效性和自由性,每周将指定执行计划(总体要干的活儿),然后根据OKR工作法进行工作。周一到周四要做工作相关的事情即80%,周五可自行安排,可以研究提升自身能力的书籍或视频,或者为创业进行做准备工作(谷歌公司推崇员工创业并且还专门设立了投资部门)等等,即20%(感兴趣的同学可以翻阅《重新定义公司》读读)。由此谷歌的开发工程师(罗伯特·格瑞史莫、罗勃·派克、肯·汤普逊等)于 2007 年 开始设计Go语言,利用 这20%的自由时间开发的实验项目,并于 2009 年以 BSD-style 授权(完全开 源)首次公开发布,于 2012 年正式发布
go语言的开发历程,稍后将编写新篇章详细讲述
优势
简单的部署方式
- 可直接编译成机械码
- 不依赖其他库
- 运行即可部署
静态类型语言
- 编译的时候可以检测出隐藏的大多数问题
- 强类型方便阅读与重构
语言层面的并发
- 天生的基于支持
- 充分利用多核
工程化比较优秀
- GoDoc 可以直接从代码和注释生成漂亮的文档
- GoFmt 统一的代码格式
- GoLint 代码语法提示
*测试框架内置
强大的标准库
- Runtime系统调度机制
- 高效的GC垃圾回收
- 丰富的标准库
简单易学
- 25个关键字
- C语言简洁基因,内嵌C语言语法支持
- 面向对象特征(继承, 多态,封装)
- 跨平台交叉编译
缺陷
包管理, 大部分都在 github上(与github或gitlab等代码管理关联性太大)
- 作者修改项目名称
- 作者删库跑路
- vendor 到 mod 迁移麻烦,很多遗留依赖问题
没有Exception,使用Error来处理异常
- error处理不太优雅, 很多重复代码(一堆的if errors 看起来并不美观)
应用
Go 语言主要用于服务端开发,其定位是开发大型软件,常用于:
- 服务器编程:日志处理、数据打包、虚拟机处理、文件系统、分布式系统、数* 据库代理等
- 网络编程:Web 应用、API 应用、下载应用
- 内存数据库
- 云平台
- 机器学习
- 区块链
- ……
使用 Go 开发的项目列表:https://github.com/golang/go/wiki/Projects
- Go
- docker
- kubernetes
- lantern
- etcd
- Prometheus
- Influxdb
- Consul
- nsq
- nats
- beego
- ……
使用 Go 开发的组织:http://go-lang.cat-v.org/organizations-using-go
- 国外:Google、CloudFlare……
- 国内:(几乎国内大厂都在使用)阿里、腾讯、百度、京东、爱奇艺、小米、今日头条、滴滴、美团、饿了么、360、七牛、B 站、盛大、搜狗……
学习Golang的一些方法
- 官网: https://golang.google.cn/doc/
- 不错的gitbook入门:
- 不错的图书:
- go语言编程
- go专家编程
里面主要讲解了一些go语言的基础实现原理、测试、并发等。
- 阅读一些优秀的项目的源码