初识Go语言
历程
Go 语言是由谷歌的开发工程师(罗伯特·格瑞史莫、罗勃·派克、肯·汤普逊等)于 2007 年
开始设计,利用 20%的自由时间开发的实验项目,并于 2009 年以 BSD-style 授权(完全开
源)首次公开发布,于 2012 年正式发布
历史上的Go版本: https://golang.google.cn/doc/devel/release.html
- go1.16 (released 2021/02/16)
- runtime/metrics
- GO111MODULE的默认值为on, 可以把GO111MODULE设置回auto
- io/ioutil为废弃,函数被转移到了os和io这两个包里
- 1.16优化了链接器,现在它在linux/amd64上比1.15快了20-25%,内存占用减少了5-15%
- go1.15 (released 2020/08/11)
- Go 1.15版本不再对darwin/386和darwin/arm两个32位平台提供支持
- 新版linker的起点,新链接器的性能要提高20%,内存占用减少30% 后续持续优化
- GOPROXY支持设置为多个proxy的列表,多个proxy之间采用逗号分隔,默认值依旧为https://proxy.golang.org,direct
- go1.14 (released 2020/02/25)
- Go Module 已经可以用于生产环境
- defer zero overhead
- go1.13 (released 2019/09/03)
- 重写了逃逸分析,减少了 Go 程序中堆上的内存申请的空间,1.3版本被诟病后改了
- defer 性能提升30%
- GO111MODULE auto
- go1.12 (released 2019/02/25)
- go1.11 (released 2018/08/24)
- Go modules, 社区积怨已久
- 实验性的 WebAssembly
- go1.10 (released 2018/02/16)
- gc快优化到头了
- 为了加快构建速度,go build 引入了构建缓存
- go1.9 (released 2017/08/24)
- type alias
- Concurrent Map sync.Map结构
- go1.8 (released 2017/02/16)
- gc 的停顿时间减少到了 1 毫秒以下(100 microseconds and often as low as 10 microseconds)
- defer 开销降低到原来的一半
- go1.7 (released 2016/08/15)
- 对编译工具链也作了优化,编译速度更快
- gc进一步提升
- Context包推出 对goroutine的生命周期管理提出的标准方案
- go1.6 (released 2016/02/17)
- go1.5 (released 2015/08/19) 发布时间推迟了两个月2个大招
- go1.4 (released 2014/12/10)
- go1.3 (released 2014/06/18)
- go1.2 (released 2013/12/01) 语言层面的优化
- 基础库的性能提升
- SetMaxThreads defaults (10000)
- go1.1 (released 2013/05/13)
- go1 (released 2012/03/28)
优势
-
简单的部署方式
- 可直接编译成机械码
- 不依赖其他库
- 直接运行即可部署
-
静态类型语言
- 编译的时候可以检测出隐藏的大多数问题
- 强类型方便阅读与重构
-
语言层面的并发
-
工程化比较优秀
- GoDoc 可以直接从代码和注释生成漂亮的文档
- GoFmt 统一的代码格式
- GoLint 代码语法提示
- 测试框架内置
-
强大的标准库
- Runtime系统调度机制
- 高效的GC垃圾回收
- 丰富的标准库
-
简单易学
- 25个关键字
- C语言简洁基因,内嵌C语言语法支持
- 面向对象特征(继承, 多态,封装)
- 跨平台
缺陷
-
包管理, 大部分都在 github上
- 作者修改项目名称
- 作者删库跑路
- vendor 到 mod 迁移麻烦,很多遗留依赖问题
-
无泛型, 2.0 有计划加上 (传言)
- interface{}可以解决该问题, 但是不易于代码阅读
-
没有Exception,使用Error来处理异常
应用
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的一些方法
作业
- 完整阅读完go官方所有版本的变更说明, 熟悉每个版本的特性与改进