logo

Golang各版本特性

作者
Modified on
Reading time
5 分钟阅读:..评论:..

Go 1.22

  • 循环变量改进:解决for循环中循环变量意外共享问题,for range中的循环变量在每次迭代中有自己的变量,go work增加支持vendor特性,go mod init不再考虑GOPATH时代的包依赖工具配置文件。
  • range支持整型表达式:for range循环的range表达式支持整型表达式。
  • 性能提升:运行时内存优化,CPU性能提高约1 - 3%,内存开销减少约1%,PGO功能进一步改进。
  • 标准库新增内容:引入math/rand/v2包,net/http.ServeMux的patterns接受方法和通配符,database/sql包新增Null[T]类型,slices包添加Concat函数。
  • 工具链:go vet工具取消对loop变量引用的警告,增加对空append、deferring time.Since和log/slog包方法调用时key - value pair不匹配的警告。

Go 1.21

  • 包含多个安全修复和错误修复。

Go 1.20:

  • 支持将slice直接转为数组,Comparable类型可比较,unsafe包添加4个函数。
  • 增加对RISC - V架构在FreeBSD操作系统的实验性支持,引入PGO。
  • 标准库加强:新增时间转换格式常量,新包crypto/ecdh支持密钥交换,新类型http.ResponseController和新钩子函数httputil.ReverseProxy.Rewrite,新方法context.WithCancelCauseos/exec.Cmd结构体新增字段。
  • 工具链:cover工具可收集整个程序覆盖率,go build等命令可接收 - pgo和 - cover标志,go test - json实现改进,vet在并行测试中可能更多循环变量引用错误,在无C工具链系统上默认禁用CGO。
  • 性能提升:编译器和GC优化减少内存开销,CPU性能整体提高2%,编译时间优化提升10%,Go发行版瘦身。

Go 1.19

- 修复泛型问题,修订Go memory model,修订go doc comment格式。 - 新增runtime.SetMemoryLimit和GOMEMLIMIT环境变量,启动时默认提高打开文件限值。 - race detector升级到v3版thread sanitizer,增加“unix” build tag,标准库net包使用EDNS,标准库flag包增加TextVar函数,正式支持64位龙芯cpu架构。 - Go运行时根据goroutine历史平均栈使用率分配初始栈,sync/atomic包增加新的高级原子类型,Go编译器使用jump table重新实现switch语句,平均性能提升20%左右。

Go 1.18

  • 支持泛型,引入Workspaces工作区,Go编译器与Go module有变化。
  • 纳入go fuzzing test,go get不再执行编译和安装工作,gofmt支持并发。
  • 内置函数Append扩容算法变化,新增net/netip包,tls client默认使用TLS 1.2版本,crypto/x509包默认拒绝SHA - 1哈希函数签名证书(自签发除外),strings包和bytes包新增Cut函数,runtime/pprof精确性提升,sync包新增一些方法。

Go 1.17

  • 支持从切片到数组指针的转换,go modules支持“修剪模块图”。
  • 编译器带来额外改进,程序性能提高约5%,amd64平台二进制大小减少约2%,unsafe包新增两个函数,go.mod中添加弃用模块的注释。
  • net包的url参数解析、IP判断和ipv4地址格式有变化。

Go 1.16

  • GO111MODULE默认为on,支持编译阶段打包静态资源文件并提供访问能力。

Go 1.15

  • 改进对高核心数小对象的分配,编译器/汇编器/链接器优化,二进制大小减少约5%,内置time/tzdata包。

Go 1.14

  • Go Module可用于生产使用,嵌入具有重叠方法集的接口,改进defer的性能,goroutines异步可抢占,页面分配器更高效,内部定时器更高效。

Go 1.13

  • 优化sync.Pool,重构逃逸分析逻辑,减少堆上的分配次数。
  • go命令默认使用Go module mirror和Go checksum database,对数字文字进行改进,错误换行,默认开启TLS 1.3。

Go 1.12

  • 改进Go modules,在analysis包基础上重写go vet命令。

Go 1.11

  • 引入Go modules。

Go 1.10

  • go test命令可缓存测试结果,go build命令缓存最近构建的包,明确预声明类型,移除某些限制,默认的GOROOT,增加GOTMPDIR变量,通过cache实现增量构建提高go tools性能,go tool pprof增加Web UI,标准库新增strings.Builderbytes包的一些方法底层实现变化。

Go 1.9

  • 提升垃圾收集器和编译器,增加类型别名,新增sync.Maptime包更安全,testing包新增helper方法,支持渐进式代码重构,引入类型别名并提升运行时和工具支持。

Go 1.8

  • 优化编译,CPU时间在32位ARM系统上减少20 - 30%,64位x86系统有适度性能改进,编译器和链接器更快,编译时间比Go 1.7改进约15%。
  • 标准库更多package使用context,垃圾回收器改进,暂停时间减小到毫秒级,改进defer函数,部分标准库使用context包改造,sort包新增Slice函数。

Go 1.7

  • context包转正,编译时间显著加快,二进制文件大小和CPU时间减少,垃圾收集器加速和标准库优化,go tool trace改进。

Go 1.6

  • 增加对HTTP/2协议的默认支持,降低垃圾回收器的延迟,runtime改变打印程序结束恐慌的方式,默认启用vendor目录,sort.Sort内部算法改进,运行速度提高约10%。

Go 1.5

  • 垃圾回收器重新设计实现,GC延迟显著降低,调度程序改进允许更改GOMAXPROCS值,map语法更改,发布go tool trace

Go 1.4

  • For - range loops支持新语法,发布官方支持包golang.org/x/mobile,运行时转换为Go语言实现且垃圾收集器更精准,堆栈大小减少,发布go generate命令,引入Internal包,项目代码管理工具切换为Git并迁移到Github。

Go 1.3

  • 堆栈管理改善,发布sync包的Pool组件,改进channel的实现提升性能。

Go 1.2

  • 支持三索引切片,go test命令支持代码覆盖率报告并提供新的go tool cover命令。

Go 1.1

  • 增强语言特性(编译器、垃圾回收机制、映射、goroutine调度器)与性能。

Go 1.0

  • 承诺兼容性,确保向后兼容。