GO 1.20 新特性【未发布】

预期特性:

 DateTime   = "2006-01-02 15:04:05"
 DateOnly   = "2006-01-02"
 TimeOnly   = "15:04:05"

// Compare returns -1 if t1 is before t2, 0 if t1 equals t2 or 1 if t1 is after t2.
func (t1 Time) Compare(t2 Time) int
GO 1.19 新特性

主要特性:

  • 泛型问题fix
  • 修订Go memory model:对Go memory model做了更正式的整体描述,增加了对multiword竞态、runtime.SetFinalizer、更多sync类型、atomic操作以及编译器优化方面的描述。
  • ​修订go doc comment格式:增加了对超链、列表、标题、标准库API引用等格式支持
  • 新增runtime.SetMemoryLimit和GOMEMLIMIT环境变量:避免Go程序因分配heap过多,超出系统内存资源限制而被kill,默认memory limit是math.MaxInt64,limit限制的是go runtime掌控的内存总量,对于开发者自行从os申请的内存(比如通过mmap)则不予考虑。
  • 启动时将默认提高打开文件的限值:对于导入os包的go程序,Go将在1.19中默认提高这些限制值到hard limit。
  • race detector将升级到v3版thread sanitizer:race detector性能相对于上一版将提升1.5倍-2倍,内存开销减半,并且没有对goroutine的数量的上限限制
  • 增加"unix" build tag://go:build unix
  • 标准库net包使用EDNS
  • 标准库flag包增加TextVar函数
  • 正式支持64位龙芯cpu架构 (GOOS=linux, GOARCH=loong64)
  • 当Go程序空闲时,Go GC进入到周期性的GC循环的情况下(2分钟一次),Go运行时现在会在idle的操作系统线程上安排更少的GC worker goroutine,减少空闲时Go应用对os资源的占用。
  • Go行时将根据goroutine的历史平均栈使用率来分配初始goroutine栈,避免了一些goroutine的最多2倍的goroutine栈空间浪费。
  • sync/atomic包增加了新的高级原子类型Bool, Int32, Int64, Uint32, Uint64, Uintptr和Pointer,提升了使用体验。
  • Go编译器使用jump table重新实现了针对大整型数和string类型的switch语句,平均性能提升20%左右。
Go 1.18 新特性

主要特性:

  • 泛型支持
  • Workspaces 工作区
  • Go编译器与Go module变化:修正的语法bug,在AMD64平台上引入architectural level,为ARM64架构带来高达 20% 的 CPU 性能改进:但由于编译器中与支持泛型有关的变化,Go 1.18 的编译速度可能比Go 1.17的编译速度大约慢15%。编译后的代码的执行时间不受影响。打算在Go 1.19中提高编译器的速度。Go 1.18明确了能修改go.mod、go.sum的命令只有三个:go get、go mod tidy和go mod download。
  • go fuzzing test:将fuzz testing纳入了go test工具链,与单元测试、性能基准测试等一起成为了Go原生测试工具链中的重要成员,单元测试函数名样式:FuzzXxx
  • go get 不再执行编译和安装工作
  • gofmt支持并发
  • 内置函数Append对切片的扩容算法发生变化:和Go 1.17以1024作为大小分界不同,Go 1.18使用256作为threshold
  • 新增net/netip包
  • tls client默认将使用TLS 1.2版本
  • crypto/x509包默认将拒绝使用SHA-1哈希函数签名的证书(自签发的除外)
  • strings包和bytes包新增Cut函数
  • runtime/pprof精确性提升
  • sync包新增Mutex.TryLock、RWMutex.TryLock和RWMutex.TryRLock
Go 1.17 新特性

主要特性:

unsafe.Addunsafe.Slicego.mod 中添加 // Deprecated: 注释来弃用模块
map[a:[1] b:[2] c:[3]]map[c:[3]]
Go 1.16 新特性

主要特性:

  • GO111MODULE 默认为 on
  • 支持编译阶段将静态资源文件打包进编译好的程序中,并提供访问这些文件的能力://go:embed
Go 1.15 新特性

主要特性:

  • 改进了对高核心数的小对象的分配
  • 编译器/汇编器/链接器的优化:二进制大小减少了约 5%,减少了链接器资源的使用(时间和内存)并提高了代码的稳健性/可维护性。
  • 内置了time/tzdata包:允许将时区数据库嵌入到程序中
Go 1.14 新特性

主要特性:

  • Go Module已可用于生产使用
  • 嵌入具有重叠方法集的接口

  • 改进了defer的性能

  • goroutines 异步可抢占

  • 页面分配器更高效

  • 内部定时器更高效

Go 1.13 新特性

主要特性:

  • 优化sync.Pool

sync 包的 Pool 组件得到改进,得其中的资源不会在垃圾回收时被清除(通过新机制里引入的缓存,两次垃圾回收之间没有被使用过的实例才会被清除)

  • 重了逃逸分析逻辑,使得 Go 程序减少了堆上的分配次数

  • go 命令默认使用 Go module mirror and Go checksum database下载和验证模块

  • 对数字文字的改进

  • 错误换行

  • 默认开启 TLS 1.3

Go 1.12 新特性

主要特性:

  • 改进了Go modules
  • 在analysis包基础上重写了 go vet 命令
Go 1.11 新特性

主要特性:

  • Go modules
Go 1.10 新特性

主要特性:

  • go test with cache:go test命令可以缓存测试结果

  • go build 命令会缓存最近构建过的包,从而加快了构建过程
  • 明确预声明类型(predeclared type)是defined type还是alias type
  • 移除spec中对method expression: T.m中T的类型的限制
  • 默认的GOROOT
  • 增加GOTMPDIR变量
  • 通过cache实现增量构建,提高go tools性能
  • go tool pprof做了一个较大的改变:增加了Web UI
  • 标准库新增strings.Builder
  • 标准库bytes包的几个方法Fields, FieldsFunc, Split和SplitAfter在底层实现上有变化,使得外部展现的行为有所变化
Go 1.9 新特性

主要特性:

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

主要特性:

  • 优化编译

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包来改造

  • sort 包中新添加的 Slice 函数,对切片进行排序变得比之前简单得多
Go 1.7 新特性

主要特性:

  • context包转正
  • 编译时间显着加快:二进制文件大小减少了 20-30%, CPU 时间减少了 5-35%
  • 垃圾收集器的加速和标准库的优化
  • go tool trace改进

Go 1.6 新特性

主要特性:

  • 增加对于 HTTP/2 协议的默认支持

  • 再一次降低了垃圾回收器的延迟

  • runtime改变了打印程序结束恐慌的方式。现在只打印发生panic的 goroutine 的堆栈,而不是所有现有的 goroutine

  • 默认启用vendor目录

  • sort.Sort 内部的算法进行了改进,运行速度提高了约 10%

Go 1.5 新特性

主要特性:

  • 垃圾回收器被完全重新设计实现: 基于并发的回收期,GC延迟显著降低,来自Twitter生产案例从300ms下降到30ms
  • 调度程序的相关改进允许将默认的 GOMAXPROCS 值(并发执行的 goroutine 的数量)从 1 更改为逻辑 CPU 的数量。在以前的版本中,默认值为 1
  • go tool trace:可以在运行时可视化跟踪程序,追踪信息可在测试或运行期间生成,展示在浏览器窗口中
  • map语法的更改:由于疏忽,允许从slice literals中省略元素类型的规则未应用于map。在1.5版本得到了修正,以下两种定义map的方式从1.5及之后都可以(即可以省略Point的类型)
Go 1.4 新特性

主要特性:

  • 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 上

Go 1.3 新特性

主要特性:

  • 堆栈管理得到了重要改善

  • 发布了 sync 包的 Pool 组件
  • 改进了channel的实现,提升了性能
Go 1.2 新特性

主要特性:

Go 1.1 新特性

主要特性:

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

主要特性: