跳到主要内容

官方文档: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

VersionTimeRelease Notes
go1.252025/08运行时在容器环境自动调整GOMAXPROCS; 实验性更快的GC; go.mod新增ignore; go doc支持-http; 新增testing/synctest; 可选启用encoding/json/v2; 多项工具链与平台支持更新
go1.242025/02工具链与链接器进一步优化; 模块与toolchain指令改进; 运行时与标准库常规性能与稳定性更新
go1.232024/08运行时与编译器性能改进; 标准库增强与小幅语言细化; 工具链体验改进
go1.222024/02for-range整型迭代语法;net/http路由匹配改进;编译器与内联优化; 标准库slices等包增强
go1.212023/08PGO(配置文件引导优化)正式可用; 新增slices/maps/cmp等包; toolchain指令; 运行时与内存回收改进
go1.202023/02语言与编译器改进; 加密与标准库增强; 构建信息与可重复构建改进; 运行时稳定性优化
go1.192022/08新内存模型阐述; GOMEMLIMIT软内存上限; 文档与工具链改进; 运行时与编译器性能优化
go1.182022/03泛型(generics)引入; fuzz测试支持; workspaces; 编译器与运行时大量更新
go1.172021/08amd64寄存器调用约定; 模块裁剪与vendor改进; 构建与运行时性能优化
go1.162021/02runtime/metrics; GO111MODULE的默认值为on, 可以把GO111MODULE设置回auto; io/ioutil为废弃,函数被转移到了os和io这两个包里; 1.16优化了链接器,现在它在linux/amd64上比1.15快了20-25%,内存占用减少了5-15%
go1.152020/08Go 1.15版本不再对darwin/386和darwin/arm两个32位平台提供支持; 新版linker的起点,新链接器的性能要提高20%,内存占用减少30% 后续持续优化; GOPROXY支持设置为多个proxy的列表,多个proxy之间采用逗号分隔,默认值依旧为https://proxy.golang.org,direct
go1.142020/02Go Module 已经可以用于生产环境; defer zero overhead
go1.132019/09重写了逃逸分析,减少了 Go 程序中堆上的内存申请的空间,1.3版本被诟病后改了; defer 性能提升30%; GO111MODULE auto
go1.122019/02内存分配优化; GO111MODULE off
go1.112018/08Go modules, 社区积怨已久; 实验性的 WebAssembly
go1.102018/02gc快优化到头了; 为了加快构建速度,go build 引入了构建缓存
go1.92017/08type alias; Concurrent Map sync.Map结构
go1.82017/02gc 的停顿时间减少到了 1 毫秒以下(100 microseconds and often as low as 10 microseconds); defer 开销降低到原来的一半
go1.72016/08对编译工具链也作了优化,编译速度更快; gc进一步提升; Context包推出对goroutine的生命周期管理提出的标准方案
go1.62016/02gc进一步提升
go1.52015/08发布时间推迟了两个月2个大招; Go 1.5 concurrent garbage collector pacing; 完成了自举,.c文件被全部重写,用Go语言编写Go语言的编译器,来回测X,直到全部通过
go1.42014/12继续优化GC,go generate诞生
go1.32014/06尝试优化GC,同时推出了 sync.Pool
go1.22013/12语言层面的优化; 基础库的性能提升; SetMaxThreads defaults (10000)
go1.12013/05Scalable Go Scheduler Design Doc
go12012/03Go 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应用、下载应用等
  • 内存数据库
  • 云平台
  • 机器学习
  • 区块链

相关链接