官方原文(英文)在此
Go 1.0
2012-03-28
- 新增 append 函数
- 新增 close 函数
- 更新复合字面量
- init 中可以运行协程了
- 新增类型 rune 用以表示 Unicode 码点
- 新增类型 error
- 新增 delete 函数代替之前的删除语法
- map 的迭代顺序不可预测,即使在同一台机器上
- 重新定义了多重赋值
a,b = 1,2
的具体行为 - 禁止 return shadowed value
- 允许拷贝含有未导出字段的 struct
- struct 和 array 可以被比较了,因此可以作为 map 的 key 了;func 不能被比较了;slice 是否能比较仍然未确定。
Go 1.1
2013-05-13
x/0
由 run-time panic 变成了 compile-time error 了。- 引入了方法(method)
- 某些情况下 return 可以省略
- 对码点大于 65535 的 Unicode 字符进行了兼容
- 交叉编译时,go 默认禁用 cgo,可以使用 CGO_ENABLED=1 环境变量来启用
Go 1.2
2013-12-01
- 加强了对使用了 nil 的代码的检查
- 新增语法
slice = array[2:4:7]
,其中 7 表示容量 - 调度器支持 pre-emption
- 限制最大线程数目,默认为 10000
- 协程的 stack 的最小尺寸从 4kb 提升到 8kb,最大尺寸可以通过 setMaxStack 设置,默认值为 1GB(64bit) / 250MB(32bit)
go doc
被godoc .
取代
Go 1.3
2014-06-18
- 修改了协程的 stack 的实现,由片段式模型变成了连续性模型。当协程需要更大的 stack,会直接使用更大的整块内存(而不是分段的)
- 遍历小 map 时不会再有固定的顺序了。
Go 1.4
2014-12-10
- 允许 for range 语法:
for range x { }
x.M()
在 x 的类型是**T
的时候报错(之前不报)- 用 Go 改写 runtime(之前用的是 C),因此 GC 能检测到程序中的所有 active pointer
Go 1.5
2015-08-19
- compiler 和 runtime 完全由 Go 实现了(外加一点汇编)
- GC 支持并发,可使中断时间变少
- GOMAXPROCS 默认等于 CPU 核心数量,之前的默认值是 1
- 支持内部包
- 支持 vendoring(试验特性)
- map 的 key 现在支持简写:
m := map[Point]string{ {29.935523, 52.891566}: "Persepolis", // key 没写 Point {-25.352594, 131.034361}: "Uluru", {37.422455, -122.084306}: "Googleplex", } 复制代码
- 重新支持
go doc
命令
GO 1.6
2016-02-17
- 语言本身完全没有变化
- 新增对 HTTP/2 的支持
Go 1.7
2016-08-15
- 语言本身几乎没有变化
Go 1.8
2017-02-16
- 两个只有 tag 不同的 struct 可以互相转化
- trace 工具支持 -pprof 选项
Go 1.9
2017-08-24
- 支持类型别名
type T1 = T2
以方便代码重构等
Go 1.10
2018-02-16
- 语言本身完全没有变化
Go 1.11
2018-08-24
- 语言本身完全没有变化
- 支持 module(试验特性),开发者再也没有必要在 GOPATH 里写代码了
Go 1.12
2019-02-25
- 语言本身完全没有变化
- 支持
GO111MODULE
环境变量 go tool vet
被go vet
取代go tool tour
需要自行安装了
Go 1.13
2019-09-03
- 新的数字字面量
- 0b1011 表示二进制整数
- 0o660 表示八进制整数
- 0x1.0p-1021 表示十六进制浮点数
- 虚数标记 i 可以和任何整数或浮点数一起使用
- 1_000_000 合法了
GO111MODULE
默认为 auto 了- 支持
GOPROXY
和GOSUMDB
go get
支持 -u 参数,取消 -m 参数。-u 只会更新当前 mudle 中的非 test 依赖,添加 -t 可以更新 test 依赖。
Go 1.14
2020-02-25
- 拥有相同属性的两个 interface 现在可以嵌入到同一个 interface 里了。
Go 1.15
2020-08-11
- 语言本身完全没有变化
- GOPROXY 会自动跳过有错误的代理
Go 1.16
2021-02-16
- 语言本身完全没有变化
go install
支持版本后缀@v1.0.0
了- 可以通过 embed 包支持
//go:embed
指令
Go 1.17
2021-08-16
- slice 可以转为 array pointer 了。
- 新增
unsafe.Add
和unsafe.Slice