官方文档:https://golang.google.cn/doc/
Go 介绍
Go 即 Golang,是 Google 公司 2009 年 11 月正式对外公开的一门编程语言。根据 Go 语言开发者自述,近 10 多年,从单机时代的 C 语言到现在互联网时代的 Java,都没有令人满意的开发语 言,而 C 往往给人的感觉是,花了 100% 的经历,却只有 60% 的开发效率,产出比太低,Java 和 C# 的哲学又来源于 C。并且,随着硬件的不断升级,这些语言不能充分的利用硬件及 CPU
因此,一门高效、简洁、开源的语言诞生了
Go 语言不仅拥有静态编译语言的安全和高性能,而且又达到了动态语言开发速度和易 维护性。 有人形容 Go 语言:Go = C + Python , 说明 Go 语言既有 C 语言程序的运行速度,又能达到 Python 语言的 快速开发。 Go 语言是非常有潜力的语言语言是非常有潜力的语言,是因为它的应用场景是目前互联网非常热门的几个领域 比如 WEB 开发、区块链开发、大型游戏服务端开发、分布式/云计算开发
国内比较知名的 B 站就是用 Go 语言开发的,像 Goggle、阿里、京东、百度、腾讯、小米、360 的很多应用也是使 用 Go 语言开发的
Go 历程
Go 语言是由谷歌的开发工程师(罗伯特·格瑞史莫、罗勃·派克、肯·汤普逊等)于 2007 年开始设计,利用 20%的自由时间开发的实验项目,并于 2009 年以 BSD-style 授权(完全开源)首次公开发布,于 2012 年正式发布
历史上的Go版本:
https://golang.google.cn/doc/devel/release
| Version | Time | Release Notes |
|---|---|---|
| go1.25 | 2025/08 | 运行时在容器环境自动调整GOMAXPROCS; 实验性更快的GC; go.mod新增ignore; go doc支持-http; 新增testing/synctest; 可选启用encoding/json/v2; 多项工具链与平台支持更新 |
| go1.24 | 2025/02 | 工具链与链接器进一步优化; 模块与toolchain指令改进; 运行时与标准库常规性能与稳定性更新 |
| go1.23 | 2024/08 | 运行时与编译器性能改进; 标准库增强与小幅语言细化; 工具链体验改进 |
| go1.22 | 2024/02 | for-range整型迭代语法;net/http路由匹配改进;编译器与内联优化; 标准库slices等包增强 |
| go1.21 | 2023/08 | PGO(配置文件引导优化)正式可用; 新增slices/maps/cmp等包; toolchain指令; 运行时与内存回收改进 |
| go1.20 | 2023/02 | 语言与编译器改进; 加密与标准库增强; 构建信息与可重复构建改进; 运行时稳定性优化 |
| go1.19 | 2022/08 | 新内存模型阐述; GOMEMLIMIT软内存上限; 文档与工具链改进; 运行时与编译器性能优化 |
| go1.18 | 2022/03 | 泛型(generics)引入; fuzz测试支持; workspaces; 编译器与运行时大量更新 |
| go1.17 | 2021/08 | amd64寄存器调用约定; 模块裁剪与vendor改进; 构建与运行时性能优化 |
| go1.16 | 2021/02 | runtime/metrics; GO111MODULE的默认值为on, 可以把GO111MODULE设置回auto; io/ioutil为废弃,函数被转移到了os和io这两个包里; 1.16优化了链接器,现在它在linux/amd64上比1.15快了20-25%,内存占用减少了5-15% |
| go1.15 | 2020/08 | Go 1.15版本不再对darwin/386和darwin/arm两个32位平台提供支持; 新版linker的起点,新链接器的性能要提高20%,内存占用减少30% 后续持续优化; GOPROXY支持设置为多个proxy的列表,多个proxy之间采用逗号分隔,默认值依旧为https://proxy.golang.org,direct |
| go1.14 | 2020/02 | Go Module 已经可以用于生产环境; defer zero overhead |
| go1.13 | 2019/09 | 重写了逃逸分析,减少了 Go 程序中堆上的内存申请的空间,1.3版本被诟病后改了; defer 性能提升30%; GO111MODULE auto |
| go1.12 | 2019/02 | 内存分配优化; GO111MODULE off |
| go1.11 | 2018/08 | Go modules, 社区积怨已久; 实验性的 WebAssembly |
| go1.10 | 2018/02 | gc快优化到头了; 为了加快构建速度,go build 引入了构建缓存 |
| go1.9 | 2017/08 | type alias; Concurrent Map sync.Map结构 |
| go1.8 | 2017/02 | gc 的停顿时间减少到了 1 毫秒以下(100 microseconds and often as low as 10 microseconds); defer 开销降低到原来的一半 |
| go1.7 | 2016/08 | 对编译工具链也作了优化,编译速度更快; gc进一步提升; Context包推出对goroutine的生命周期管理提出的标准方案 |
| go1.6 | 2016/02 | gc进一步提升 |
| go1.5 | 2015/08 | 发布时间推迟了两个月2个大招; Go 1.5 concurrent garbage collector pacing; 完成了自举,.c文件被全部重写,用Go语言编写Go语言的编译器,来回测X,直到全部通过 |
| go1.4 | 2014/12 | 继续优化GC,go generate诞生 |
| go1.3 | 2014/06 | 尝试优化GC,同时推出了 sync.Pool |
| go1.2 | 2013/12 | 语言层面的优化; 基础库的性能提升; SetMaxThreads defaults (10000) |
| go1.1 | 2013/05 | Scalable Go Scheduler Design Doc |
| go1 | 2012/03 | Go 1 and the Future of Go Programs |
Go 特点
开发者使用编程语言的三大分类(执行速度、简易程度、开发难度):
- 执行速度快、编译速度慢(编译型):C,C++
- 执行速度较慢、编译速度快(解释型):JAVA,.NET
- 执行速度慢、开发难度小(动态脚本):Python,PHP
Go语言在3个条件做了平衡:易于开发、快速编译、高效执行
Go 特性
简单的部署方式
- 可直接编译成机械码
- 不依赖其他库
- 直接运行即可部署
静态类型语言
- 编译的时候可以检测出隐藏的大多数问题
- 强类型方便阅读与重构
语言层面的并发
- 天生的基于支持
- 充分利用多核
工程化比较优秀
- GoDoc 可以直接从代码和注释生成漂亮的文档
- GoFmt 统一的代码格式
- GoLint 代码语法提示
- 测试框架内置
强大的标准库
- Runtime系统调度机制
- 高效的GC垃圾回收
- 丰富的标准库
简单易学
- 25个关键字
- C语言简洁基因,内嵌C语言语法支持
- 面向对象特征(继承, 多态,封装)
- 跨平台
Go 应用
Go语言主要用于服务端开发,其定位是开发大型软件,常用于:
- 服务器编程:日志处理、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等
- 网络编程:web应用、API应用、下载应用等
- 内存数据库
- 云平台
- 机器学习
- 区块链