GoLang 各版本变更摘要

官方原文(英文)在此

Go 1.0

2012-03-28

  1. 新增 append 函数
  2. 新增 close 函数
  3. 更新复合字面量
  4. init 中可以运行协程了
  5. 新增类型 rune 用以表示 Unicode 码点
  6. 新增类型 error
  7. 新增 delete 函数代替之前的删除语法
  8. map 的迭代顺序不可预测,即使在同一台机器上
  9. 重新定义了多重赋值 a,b = 1,2 的具体行为
  10. 禁止 return shadowed value
  11. 允许拷贝含有未导出字段的 struct
  12. struct 和 array 可以被比较了,因此可以作为 map 的 key 了;func 不能被比较了;slice 是否能比较仍然未确定。

Go 1.1

2013-05-13

  1. x/0 由 run-time panic 变成了 compile-time error 了。
  2. 引入了方法(method)
  3. 某些情况下 return 可以省略
  4. 对码点大于 65535 的 Unicode 字符进行了兼容
  5. 交叉编译时,go 默认禁用 cgo,可以使用 CGO_ENABLED=1 环境变量来启用

Go 1.2

2013-12-01

  1. 加强了对使用了 nil 的代码的检查
  2. 新增语法 slice = array[2:4:7],其中 7 表示容量
  3. 调度器支持 pre-emption
  4. 限制最大线程数目,默认为 10000
  5. 协程的 stack 的最小尺寸从 4kb 提升到 8kb,最大尺寸可以通过 setMaxStack 设置,默认值为 1GB(64bit) / 250MB(32bit)
  6. go docgodoc . 取代

Go 1.3

2014-06-18

  1. 修改了协程的 stack 的实现,由片段式模型变成了连续性模型。当协程需要更大的 stack,会直接使用更大的整块内存(而不是分段的)
  2. 遍历小 map 时不会再有固定的顺序了。

Go 1.4

2014-12-10

  1. 允许 for range 语法:for range x { }
  2. x.M() 在 x 的类型是 **T 的时候报错(之前不报)
  3. 用 Go 改写 runtime(之前用的是 C),因此 GC 能检测到程序中的所有 active pointer

Go 1.5

2015-08-19

  1. compiler 和 runtime 完全由 Go 实现了(外加一点汇编)
  2. GC 支持并发,可使中断时间变少
  3. GOMAXPROCS 默认等于 CPU 核心数量,之前的默认值是 1
  4. 支持内部包
  5. 支持 vendoring(试验特性)
  6. map 的 key 现在支持简写:
    m := map[Point]string{
        {29.935523, 52.891566}:   "Persepolis", // key 没写 Point
        {-25.352594, 131.034361}: "Uluru",
        {37.422455, -122.084306}: "Googleplex",
    }
    复制代码
  7. 重新支持 go doc 命令

GO 1.6

2016-02-17

  1. 语言本身完全没有变化
  2. 新增对 HTTP/2 的支持

Go 1.7

2016-08-15

  1. 语言本身几乎没有变化

Go 1.8

2017-02-16

  1. 两个只有 tag 不同的 struct 可以互相转化
  2. trace 工具支持 -pprof 选项

Go 1.9

2017-08-24

  1. 支持类型别名 type T1 = T2 以方便代码重构等

Go 1.10

2018-02-16

  1. 语言本身完全没有变化

Go 1.11

2018-08-24

  1. 语言本身完全没有变化
  2. 支持 module(试验特性),开发者再也没有必要在 GOPATH 里写代码了

Go 1.12

2019-02-25

  1. 语言本身完全没有变化
  2. 支持 GO111MODULE 环境变量
  3. go tool vetgo vet 取代
  4. go tool tour 需要自行安装了

Go 1.13

2019-09-03

  1. 新的数字字面量
    1. 0b1011 表示二进制整数
    2. 0o660 表示八进制整数
    3. 0x1.0p-1021 表示十六进制浮点数
    4. 虚数标记 i 可以和任何整数或浮点数一起使用
    5. 1_000_000 合法了
  2. GO111MODULE 默认为 auto 了
  3. 支持 GOPROXYGOSUMDB
  4. go get 支持 -u 参数,取消 -m 参数。-u 只会更新当前 mudle 中的非 test 依赖,添加 -t 可以更新 test 依赖。

Go 1.14

2020-02-25

  1. 拥有相同属性的两个 interface 现在可以嵌入到同一个 interface 里了。

Go 1.15

2020-08-11

  1. 语言本身完全没有变化
  2. GOPROXY 会自动跳过有错误的代理

Go 1.16

2021-02-16

  1. 语言本身完全没有变化
  2. go install 支持版本后缀 @v1.0.0
  3. 可以通过 embed 包支持 //go:embed 指令

Go 1.17

2021-08-16

  1. slice 可以转为 array pointer 了。
  2. 新增 unsafe.Addunsafe.Slice

猜你喜欢

转载自juejin.im/post/7018778089190588423