大家好,我是煎鱼。

关于 Go1.22 先前已分享过好几篇文章,今天主要是针对一些了零散的新更新进行补充说明。

主要选择的是对日常开发有一定影响的,主打一个知情了解即可。

运行环境要求

Go 1.22 是能在 macOS 10.15 Catalina 上运行的最后一个版本。Go 1.23 需要 macOS 11 Big Sur 或更高版本。

言外之意,如果期望用更新版本的 Go。要尽快安排升级 macOS 的系统版本了,不然将会被新版本所抛下。

工作区支持 vendor

Go 在一开始的 workspace(工作区)的功能支持上,由于考虑到简化实现,没有去支持 vendor 模式。但从社区反馈来看确实是有真实的使用诉求的。

从 Go1.22 起,把这个缺漏填补上了。对应的命令是:go work vendor;功能方面与 go mod vendor 保持一致。

旧依赖管理不再支持

在传统的 GOPATH 模式下(即 GO111MODULE=off 时),不再支持在 Go Module 之外使用 go get。其他编译命令,例如:go buildgo test,将继续无限期地适用于传统的 GOPATH 程序。

初始化命令 go mod init 将不再尝试从其他依赖工具(如 Gopkg.lock)的配置文件中导入模块依赖。正式放弃对旧版工具的支持。

运行时性能提高

Go1.22 起,Runtime(运行时)会将基于类型的垃圾回收元数据保持在每个堆对象附近,以此提高了综合性能:

  • CPU:Go 程序的 CPU 性能(延迟或吞吐量)提高 1-3%
  • Memory:通过重复冗余元数据,将大多数 Go 程序的内存开销降低了约 1%。

带来的副作用是这一变更调整了内存分配器的大小类边界,一些对象可能会被上移到一个合适大小的类中。

这对我们 Go 程序影响几乎没有,四舍五入升个级就能提高程序性能了。

PGO 优化效果更好

Profile-guided Optimization (PGO) 构建的虚拟化调用比例比以前更高。

在一组具有代表性的 Go 程序中,大多数程序现在都能通过启用 PGO 得到 2% 到 14% 的性能改进

Trace 更好用了

跟踪(go tool trace)工具的 Web UI 已被彻底刷新,解决了多个历史问题,并提高了各子页面的可读性。

现在支持在面向线程的视图中探索跟踪。跟踪查看器现在还能显示所有系统调用的全部持续时间。

这些改进仅适用于查看使用 Go 1.22 或更新版本构建的程序生成的跟踪。未来的版本将对旧版 Go 生成的跟踪进行部分改进。

总结

今天针对 Go1.22 的其他新功能点进行了分享和介绍,不少地方都是去旧立新。升级带来的性能推高也是每个版本都有一点。

与此同时 Trace 终于有 Google 的一群大佬大修了一把,太感动了。毕竟我们现在用的 Trace 是 2014 年的设计产物...

所以之前使用起来,确实是有一定门槛。大家可以关注下这次迭代后尝试使用一下,看看区别。

Go1.22 预计 2 月份正式发布,目前已发布 RC2。

总进度:

我猜测中旬发布,大家可以边过节边学习新版本了!完整的发布内容可以查看 Go 1.22 Release Notes

已更新的 Go1.22 特性系列

文章持续更新,可以微信搜【脑子进煎鱼了】阅读,本文 GitHub github.com/eddycjy/blog 已收录,学习 Go 语言可以看 Go 学习地图和路线,欢迎 Star 催更。

煎鱼
8.4k 声望12.8k 粉丝