TOC

Golang 版本

2007 Robert Griesemer、Rob Pike 和 Ken Thompson 三位巨头都在谷歌任职,开始设计一门全新的语言。

Release Status Release date Maintenance end
go1 End-of-Life 2012-03-28 2013-12-01
go1.1 End-of-Life 2013-05-13 2014-06-18
go1.2 End-of-Life 2013-12-01 2014-12-10
go1.3 End-of-Life 2014-06-18 2015-08-19
go1.4 End-of-Life 2014-12-10 2016-02-17
go1.5 End-of-Life 2015-08-19 2016-08-15
go1.6 End-of-Life 2016-02-17 2017-02-16
go1.7 End-of-Life 2016-08-15 2017-08-24
go1.8 End-of-Life 2017-02-16 2018-02-16
go1.9 End-of-Life 2017-08-24 2018-08-24
go1.10 End-of-Life 2018-02-16 2019-02-25
go1.11 End-of-Life 2018-08-24 2019-09-03
go1.12 End-of-Life 2019-02-25 2020-02-25
go1.13 End-of-Life 2019-09-03 2020-08-11
go1.14 End-of-Life 2020-02-25 2021-02-16
go1.15 End-of-Life 2020-08-11 2021-08-16
go1.16 End-of-Life 2021-02-16 2022-03-15
go1.17 End-of-Life 2021-08-16 2022-08-02
go1.18 End-of-Life 2022-03-15 2023-02-01
go1.19 Maintenance 2022-08-02 Q3 2023
go1.20 Current 2023-02-01 Q1 2024
go1.21 Planned Q3 2023 Q3 2024

1.16 及以前的版本

我开始学习 Golang 的时候,已经是 1.5 和 1.6 版本了,更早的版本只需要对重大特性引入时间做一个简单了解。
现在主要的开发版本已经升级到 1.18 和 1.20。

  • 1.0
  • 第一个正式版本,核心特性都已经包含在里面,承诺以后语法不会发生不兼容变化
  • 至今为止,承诺都实现了。后面的版本几乎很少有激动人心的功能,绝大多数时候都是各种改进
  • 1.1
  • 1.2
  • 支持 slice[low:high:max] 语法
  • 1.4
  • for range 语法引入
  • 1.5
  • 实现自举
  • 1.9
  • type alias 语法引入
  • 1.11
  • Go Modules 引入
  • 1.12
  • 开始支持 TLS 1.3
    • 需要通过 GODEBUG=tls13=1 开启(不能通过 tls Config MaxVersion 限制版本)
    • 0-RTT 不被支持(到 2023 年,依然没有提供支持
  • 1.13
  • TLS 1.3 默认开启
  • 1.14
  • TLS 1.3 成为默认选项,并且无法通过 GODEBUG 关闭
  • 异步可抢占 goroutine
  • 1.16
  • Go Modules 成为默认(GO111MODULE = on
  • 支持将静态文件打包进可执行文件(//go:embed
  • 弃用 io/ioutil

参考:

1.17

  • Module graph pruning(依赖图修剪)
  • 切片转数组指针

参考:

1.18

  • 泛型(Golang 发布以来最大的语法变更)
  • fuzzing(模糊测试)
  • TLS 客户端默认版本改为 1.2

参考:

1.19

没有特别值得关注的的改动。

参考:

1.20

  • 切片转数组

参考:

1.21

  • min, maxclear
  • 循环变量捕获 (loop variable capture)
    参见:2023/07/05,Go 1.21 for 语义变更
  • 标准库:log/slog, slices, maps, cmp

参考: