新建文本.txt 4.9 KB

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