123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- 每年半年发布一个二级版本
- 2007年9月开始设计
- 2009年11月推出
- Go 1.0 — 2012 年 3 月
- Go 的第一个版本,带着一份兼容性说明文档来保证与未来发布版本的兼容性,进而不会破坏已有的程序
- Go 1.1 — 2013 年 5 月
- 这个 Go 版本专注于优化语言(编译器,gc,map,go 调度器)和提升它的性能
- Go 1.2 — 2013 年 12 月
- 本版本中 test 命令支持测试代码覆盖范围并提供了一个新命令 go tool cover ,此命令能测试代码覆盖率
- Go 1.3 — 2014 年 6 月:
- 这个版本对栈管理做了重要的改进。栈可以申请连续的内存片段,提高了分配的效率,使下一个版本的栈空间降到 2KB
- Go 1.4 — 2014 年 12 月:
- 此版本带来了官方对 Android 的支持,golang.org/x/mobile ) 让我们可以只用 Go 代码就能写出简单的 Android 程序
- Go 也提供了 go generate 命令通过扫描用 //go:generate 指示的代码来简化代码生成过程
- Go 1.5 — 2015 年 8 月:
- 实现了自举
- 这个新版本,发布时间推迟了两个月,目的是在以后每年八月和二月发布新版本
- 这个版本对 gc 进行了重新设计
- 这个版本也发布了运行时追踪,用命令 go tool trace 可以查看
- Go 1.6 — 2016 年 2 月:
- 这个版本最重大的变化是使用 HTTPS 时默认支持 HTTP/2
- 在这个版本中 gc 等待时间也降低了
- Go 1.7 — 2016 年 8 月:
- 这个版本发布了 context 包,为用户提供了处理超时和任务取消的方法
- 对编译工具链也作了优化,编译速度更快,生成的二进制文件更小,有时甚至可以减小 20% 到 30%
- Go 1.8 — 2017 年 2 月:
- 把 gc 的停顿时间减少到了 1 毫秒以下:其他的停顿时间已知,并会在下一个版本中降到 100 微秒以内
- 这个版本也改进了 defer 函数
- Go 1.9 — 2017 年 8 月:
- 这个版本支持下面的别名声明:type byte = uint8
- sync 包新增了一个 Map 类型,是并发写安全的
- Go 1.10 — 2018 年 2 月:
- test 包引进了一个新的智能 cache,运行会测试后会缓存测试结果。如果运行完一次后没有做任何修改,那么开发者就不需要重复运行测试,节省时间。
- 为了加快构建速度,go build 命令现在也维持了一份最近构建包的缓存。
- Go 1.11 — 2018 年 8 月:
- 带来了一个重要的新功能:Go modules
- 第二个特性是实验性的 WebAssembly,为开发者提供了把 Go 程序编译成一个可兼容四大主流 Web 浏览器的二进制格式的能力
- Go 1.12 — 2019 年 2 月:
- 基于 analysis 包重写了 go vet 命令,为开发者写自己的检查器提供了更大的灵活性
- Go 1.13 — 2019 年 9 月:
- 改进了 sync 包中的 Pool,在 gc 运行时不会清除 pool。它引进了一个缓存来清理两次 gc 运行时都没有被引用的 pool 中的实例。
- 重写了逃逸分析,减少了 Go 程序中堆上的内存申请的空间。
- Go1.14 - 2020 年 2 月:
- 现在 Go Module 已经可以用于生产环境,鼓励所有用户迁移到 Module。
- 该版本支持嵌入具有重叠方法集的接口。
- 性能方面做了较大的改进,包括:进一步提升 defer 性能、页分配器更高效,同时 timer 也更高效。
- Goroutine 支持异步抢占。
- Go1.15 - 2020 年 8 月:
- Go 链接器现在具有更低的资源使用量,更快的速度以及更高的代码质量。通常,对于大型Go应用程序,链接过程比之前快 20% 左右,而内存使用消耗减少 30% 左右.
- Go 1.15 二进制文件比Go 1.14 小约5%.
- Go 对 ARM / ARM64 有了更好的 OpenBSD 支持
- 现在使用更高内核数的系统,分配的小对象要比之前版本快很多.
- Go 1.16 — 2021 年 2 月:
- embed 包和 //go:embed 指令
- 增加对 macOS ARM64 的支持
- 默认启用 Module
- io/fs 包,不建议使用 io/ioutil 了,因为其中的内容移到 os 和 io 包了
- Go 1.17 — 2021 年 8 月:
- 基于寄存器的调用惯例替代基于堆栈的调用惯例
- 增加对 Windows ARM64 的支持
- 新的 //go:build 新版构建约束格式化支持
- go.mod 优化
- 标准库的一些改进
- Go1.18 - 2022 年初:
- 如果您正在更新您的软件包以使用泛型,请考虑将新的泛型API隔离到自己的文件中,并为其使用Go 1.18的构建标签(//go:build go1.18),以便Go 1.17用户可以继续构建和使用非泛型部分。
- 函数式编程的语言:
- 只支持函数式范式(如Haskell)
- 多范式+一流支持(如Scala、Elixir)
- 多范式+部分支持(如Javascript、Go)。在后一类语言中,函数式编程一般通过使用社区创建的库来支持,这些库复制前两种语言的标准库中的部分或全部功能。
- Go的语法接近C语言,不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能,但增加了 切片(Slice) 型、并发、管道、垃圾回收、接口(Interface)等特性
- Go内嵌了关联数组map和字符串string类型
- 代码风格:内置gofmt工具
|