返回介绍

上卷 程序设计

中卷 标准库

下卷 运行时

源码剖析

附录

版本 变更记录

发布于 2024-10-12 19:16:09 字数 7428 浏览 0 评论 0 收藏 0

Release History, go.dev.

1.21

  • 新增 minmaxclear 内置函数。
  • panic(nil)recover 返回 *PanicNilError
  • 类型推断(type inference)能力提升。
  • 包初始化顺序规范。
  • 编译优化 PGO 正式启用,默认 " -pgo=auto "。
  • 新增 log/slog。
  • 新增 testing/slogtest。
  • 新增 slices。
  • 新增 maps。
  • 新增 cmp。
  • 支持 MPTCP (MultiPath TCP)。
  • 反射 ValueOf 不再强制堆分配。

1.20

  • 将切片直接转换为数组。
  • 可比较类型完全符合 comparable 泛型约束。
  • 使用 PGO 优化编译。(预览)
  • 标准库编译到缓存目录,缩减发行版文件大小。
  • 最后支持 macOS 10.13/10.14、Windows 7/8 的版本。
  • 新增 unsafe SliceDataStringStringData 函数。
  • 新增 errors Join 打包多个错误对象,并调整相关函数。
  • 新增 context WithCancelCause 函数。
  • 新增 crypto/ecdh。
  • 试验 arena。( GOEXPERIMENT=arenas

1.19

  • 增加 //go:build unix 支持。
  • 改善 switch 性能。
  • 运行时内存限制(soft memory limit, GOMEMLIMIT)。
  • 自动将文件限制(open file limit)调整到最大值(hard limit)。
  • 竞争检测(race detector, thread sanitizer)升级到 v3。
  • 新增 sync/atomic.Int32 等类型原子版本。

1.18

  • 泛型支持。(尚不完善)
  • 模糊测试。(Fuzzing)
  • go work 对工作空间(workspace)支持。
  • go get 专注于依赖管理,不再构建(build)和安装(install)包。
  • 垃圾回收器支持非堆(noheap)内存。
  • 可内联包含循环的函数。
  • 新增 debug/buildinfo。
  • 新增 net/netip。

1.17

  • 直接从切片转换为数组指针。
  • 新增 unsafe.Addunsafe.Slice 简化操作。
  • 模块获取 -insecure 参数被移除,以 GOINSECURE 代替。
  • 如模块缺失 go version 指令,则使用 1.11/1.16 版本。
  • //go:build 替代 // +build
  • 编译器实现了以寄存器传递参数。
  • 改进错误信息中的调用堆栈信息。
  • 可内联含闭包的函数。

1.16

  • 单元测试调用 os.Exit(0) 视为失败。
  • 无论是否有 go.mod,模块感知都为默认模式。
  • 编译命令(go build, go test)不再修改 go.mod,使用 go get 和 go mod tidy。
  • 安装命令(go install)支持版本号。
  • 下载命令(go get)不再使用 insecure 非安全方式。
  • 调试 GODEBUG=inittrace=1 输出初始化函数执行信息。
  • 使用 MADV_DONTNEED 代替 MADV_FREE ,立即释放物理内存。
  • 新增 //go:embed 向目标文件嵌入静态文件(文件树)。
  • 新增 runtime/metrics ,替代 runtime.ReadMemStats
  • 弃用 io/ioutil

1.15

  • GOPROXY 支持逗号和竖线分隔。(逗号仅在 404、410 时尝试下一代理)
  • GOMODCACHE 设置模块缓存位置,默认 GOPATH[0]/pkg/mod
  • 预置小整数表(0 ~ 255)。转换为接口时,不再分配额外内存。
  • 链接器重大改进。

1.14

  • 嵌入重叠接口。(方法集是所有嵌入声明的并集)
  • 模块可用于生产环境。
  • 环境变量 GOINSECURE 指示某些源不使用 HTTPS,跳过证书验证。
  • 内联调用 defer 函数(inline call),提升性能。
  • 基于信号(signal)的异步抢占调度。
  • 内存分配器延迟更小,吞吐量更高。
  • 重新设计的内部定时器(internal timer)更高效。
  • 新增 hash/maphash。
  • 增加 testing.T.CleanUp。

macOS 平台约定,二进制内 Go 符号以下划线开头。

1.13

  • 增加二进制(0b)、八进制(0o)整数字面量。
  • 增加十六进制浮点字面量。
  • 增加虚数字面量。
  • 使用下划线作为数字分隔符(000_111_222)。
  • 移除位移数(shift count)必须是无符号整数(unsigned)限制。
  • 模块感知 GO111MODULE 默认开启。
  • 模块相关环境变量: GOPRIVATE, GOPROXY, GOSUMDB。
  • 提升 defer 性能。(deferprocStack)
  • 更积极归还物理内存。(bgscavenge)
  • errors 支持 unwrap 相关操作。( fmt.Errorf %w

1.12

  • 改写 go vet ,不再支持 go tool vet
  • 编译缓存必须,不能用 GOCACHE=off 关闭。
  • 最后一个支持 //go:binary-only-package 的版本。
  • 改进存活变量分析,更快执行 Finalizer 操作。
  • 支持更多函数内联。建议用 runtime.CallersFrames 代替 Callers
  • 支持 -lang 参数指定语言版本,用于检查新增语法兼容问题。
  • 使用不同调用约定处理 Go 和 ASM 函数。
  • 提升 DWARF 调试信息。
  • 改进 trace 跟踪信息。
  • 提升垃圾清理性能,减少分配延时。
  • 更积极向操作系统归还内存。
  • 改用 MADV_FREE 释放物理内存。
  • 函数 runtime.Caller 等不再包含编译器自动生成的初始化函数。
  • 标准库 crypto/tls 支持 TLS 1.3。

Darwin syscall 使用 libSystem,确保兼容 macOS 和 iOS。

1.11

  • type.switch 里的未使用变量视为错误。
  • 实验性支持 WebAssembly。
  • 实验性启用依赖管理 Modules,替代 GOPATH。
  • 实验性支持在调试器(delve)中调用函数(call)。
  • 最后一个支持 GOCACHE=off 的版本。
  • 编译器支持内联更多类型函数,包括调用 panic 的函数。
  • 编译优化 map delete、slice append。
  • 更准确的调试信息,对没有 -N -l 编译结果提供更好支持。
  • 单元测试默认调用 go vet 进行检查。
  • 最后一个支持 godoc 命令行的版本,未来基于 web。
  • 内存分配器使用稀疏堆,不再有 512GB 限制。

符号 @ 在 module 中有特殊含义,命令行不再支持 @ 符号。

1.10

  • 使用 GOCACHE 缓存编译结果。
  • 单元测试(go test)也将使用缓存加速。
  • 性能测试(go tool pprof)新增 WEB 界面。
  • 堆栈跟踪(stack trace)不再包含编译器自动生成(autogenerated)函数。
  • GOMAXPROCS 最大限制取消。
  • LockOSThread / UnlockOSThread 嵌套数量必须匹配。

1.9

  • 类型别名。( type Alias = Name
  • 并行编译。( GO19CONCURRENTCOMPILATION=0 禁用)
  • 工具集默认不再扫描 vendor 目录。
  • 安装目录不再固定。(可显式设置 GOROOT
  • 新增 sync/map。
  • 新增 test helper。
  • 新增 pprof label。

1.8

  • 不同的 tag 不再阻止 struct 显式转换。
  • 改善 map 并发操作检测。
  • 垃圾回收暂停时间进一步缩短到(10 ~ 100 us)。
  • 函数参数生命周期不再等同整个栈帧,可提前回收,用 KeepAlive 保持。
  • 改进 defer 、CGO 调用开销(一半)。
  • 编译后端 SSA 支持所有平台。
  • 默认 GOPATH 设置 $HOME/go
  • 插件模式(buildmode: plugin )。
  • 支持 mutex profile。
  • HTTP2/push,HTTP Server Graceful Shutdown。

1.7

  • 新二进制格式。
  • AMD64 使用 SSA 后端。
  • 包依赖 vendor 成为正式功能。
  • 增加对 Linux's perf、Intel's VTune 工具支持(设置并保存 BP 寄存器值)。
  • 实验性支持 binary-only package。(静态包,不再需要源码文件)

BP 寄存器可选: 在 make.bash 构建工具链时添加 GOEXPERIMENT=noframepointer 屏蔽。

1.6

  • CGO 支持指针共享。
  • 重写 parser ,替代 yacc 生成。
  • 增加 buildmode c-shared 支持。
  • HTTP2 支持。

1.5

  • 自举:用 Go 重写运行时和编译器,需要使用 Go 编译 Go。
  • 重命名 6g6l ,改为 compilelinkerasm
  • 环境变量 GOMAXPROCS 默认 cores 数量。
  • 增加 buildmode 支持,生成共享库。
  • 支持 internalvendor 包。
  • 支持 go tool trace 命令,跟踪执行过程。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文