发布时间:2023.02.01
官方说明:Go 1.20 Release Notes - The Go Programming Language
特性:
支持将slice直接转为数组
Comparable类型可比较
unsafe包添加Slice
,SliceData
,String
,StringData 4个函数
可移植性:Go 1.20将会成为支持macOS 10.13 High Sierra和10.14 Mojave的最后一个版本。
Go 1.20增加了对于RISC-V架构在FreeBSD操作系统的实验性支持
PGO引入
工具链
cover 工具可以收集整个程序的覆盖率,不仅仅是单元测试
go build、go install 和其他与构建相关的命令可以接收一个 -pgo 标志,启用配置文件引导优化,以及一个 -cover 标志,用于整个程序覆盖率分析
go test -json 的实现已得到改进,可以处理复杂多样的 Stdout 输出
vet 在并行运行的测试中可能会发生更多循环变量引用错误
在没有 C 工具链 的系统上默认禁用 CGO
性能提升
编译器和 GC 的优化减少了内存开销,并将 CPU 性能整体提高了 2%
针对编译时间进行了优化,提升了 10%。使得构建速度与 Go 1.17 保持一致 (恢复到了泛型之前的速度)
Go 发行版瘦身,新版本起,Go 的 $GOROOT/pkg 目录将不再存储标准库的预编译包存档,Go 发行版的将迎来一轮瘦身
时间:2022.05
官方说明:Go 1.19 Release Notes - The Go Programming Language
主要特性:
时间:2022.03
官方说明:Go 1.18 Release Notes - The Go Programming Language
主要特性:
时间:2021.08
官方说明:Go 1.17 Release Notes - The Go Programming Language
主要特性:
unsafe包新增了unsafe.Add
和unsafe.Slice
go.mod 中添加 // Deprecated: 注释来弃用模块
net包:
url参数解析增加对“;”的支持变化(原先 example?a=1;b=2&c=3 会解析成 map[a:[1] b:[2] c:[3]]
, 现在解析成map[c:[3]]
)
增加 IP.IsPrivate 判断私有 IP
a.b.c.d 格式的 ip v4 地址不允许每段有前缀 0(因为某些系统会认为前缀 0 表示 8进制)
等
时间:2021.02
官方说明:Go 1.16 Release Notes - The Go Programming Language
主要特性:
时间:2020.08
官方说明:Go 1.15 Release Notes - The Go Programming Language
主要特性:
时间:2020.02
官方说明:Go 1.14 Release Notes - The Go Programming Language
主要特性:
嵌入具有重叠方法集的接口
改进了defer的性能
goroutines 异步可抢占
页面分配器更高效
内部定时器更高效
等
时间:2019.09
官方说明:Go 1.13 Release Notes - The Go Programming Language
主要特性:
sync 包的 Pool 组件得到改进,得其中的资源不会在垃圾回收时被清除(通过新机制里引入的缓存,两次垃圾回收之间没有被使用过的实例才会被清除)
重了逃逸分析逻辑,使得 Go 程序减少了堆上的分配次数
go 命令默认使用 Go module mirror and Go checksum database下载和验证模块
对数字文字的改进
错误换行
默认开启 TLS 1.3
等
时间:2019.02
官方说明:Go 1.12 Release Notes - The Go Programming Language
主要特性:
时间:2018.08
官方说明:Go 1.11 Release Notes - The Go Programming Language
主要特性:
时间:2018.02
官方说明:Go 1.10 Release Notes - The Go Programming Language
主要特性:
go test with cache:go test命令可以缓存测试结果
时间:2017.08
官方说明:Go 1.9 Release Notes - The Go Programming Language
主要特性:
时间:2017.02
官方说明:Go 1.8 Release Notes - The Go Programming Language
主要特性:
CPU 时间在 32 位 ARM 系统上减少了 20-30%, 还针对 64 位 x86 系统进行了一些适度的性能改进。编译器和链接器变得更快。
编译时间应该比 Go 1.7 改进了大约 15%
Go 1.7中进入标准库的context,提供了取消和超时机制。
Go 1.8 让标准库中更多package使用(支持)context,包括 database/sql,net 包, net/http 包中的 Server.Shutdown等
同时识别了剩余仍未解决的暂停模式,并在下一个版本中得到修复。修复后,通常情况下暂停时间能控制在 100 微秒左右,甚至能低至 10 微秒。
改进了 defer 函数
部分标准库使用context包来改造
时间:2016.08
官方说明:Go 1.7 Release Notes - The Go Programming Language
主要特性:
go tool trace改进
时间:2016.02
官方说明:Go 1.6 Release Notes - The Go Programming Language
主要特性:
增加对于 HTTP/2 协议的默认支持
再一次降低了垃圾回收器的延迟
runtime改变了打印程序结束恐慌的方式。现在只打印发生panic的 goroutine 的堆栈,而不是所有现有的 goroutine
默认启用vendor目录
sort.Sort 内部的算法进行了改进,运行速度提高了约 10%
时间:2015.08
官方说明:Go 1.5 Release Notes - The Go Programming Language
主要特性:
时间:2014.02
官方说明:Go 1.4 Release Notes - The Go Programming Language
主要特性:
For-range loops支持新语法
1234567891011121314151617
package mainimport “fmt”func main() { sli := []string{“shandong”, “zhejiang”, “guangdong”, “jiangsu”} for k, v := range sli { fmt.Println(“k-v:”, k, v) //go 1.3及之前的For-range loops } for range sli { fmt.Println(“从1.4开始这种写法是可以通过编译的”) }}
Android 的官方支持包golang.org/x/mobile随该版本一同发布,使开发者可以仅用 Go 代码编写简单的 Android 应用。
之前用 C 和汇编语言编写的大多数运行时已转换为用 Go 语言实现 && 使用了更精准的垃圾收集器,堆栈大小减少了 10~30%
发布 go generate 命令,此命令会扫描//go:generate 指令提供的信息生成代码,简化了代码生成的方式。 Generating code
引入了Internal包
Go 的项目代码管理工具从 Mercurial 切换为 Git,与此同时,项目也从 Google Code 迁移到了 Github 上
时间:2014.06
官方说明:Go 1.3 Release Notes - The Go Programming Language
主要特性:
堆栈管理得到了重要改善
时间:2013.12
官方说明:Go 1.2 Release Notes - The Go Programming Language
主要特性:
go tool cover
命令输出代码测试覆盖率的统计信息. The cover story时间:2013.05
官方说明:Go 1.1 Release Notes - The Go Programming Language
主要特性:
时间:2012.03
官方说明:Go 1 Release Notes - The Go Programming Language
主要特性: