Go1.22 新特性:性能提高、Trace 大修、工作区支持 vendor 等

大家好,我是煎鱼。

关于 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/blo... 已收录,学习 Go 语言可以看 Go 学习地图和路线,欢迎 Star 催更。

相关推荐
梦想很大很大1 小时前
使用 Go + Gin + Fx 构建工程化后端服务模板(gin-app 实践)
前端·后端·go
lekami_兰6 小时前
MySQL 长事务:藏在业务里的性能 “隐形杀手”
数据库·mysql·go·长事务
却尘10 小时前
一篇小白也能看懂的 Go 字符串拼接 & Builder & cap 全家桶
后端·go
ん贤10 小时前
一次批量删除引发的死锁,最终我选择不加锁
数据库·安全·go·死锁
mtngt111 天前
AI DDD重构实践
go
Grassto2 天前
12 go.sum 是如何保证依赖安全的?校验机制源码解析
安全·golang·go·哈希算法·go module
Grassto4 天前
11 Go Module 缓存机制详解
开发语言·缓存·golang·go·go module
程序设计实验室5 天前
2025年的最后一天,分享我使用go语言开发的电子书转换工具网站
go
我的golang之路果然有问题5 天前
使用 Hugo + GitHub Pages + PaperMod 主题 + Obsidian 搭建开发博客
golang·go·github·博客·个人开发·个人博客·hugo
啊汉7 天前
古文观芷App搜索方案深度解析:打造极致性能的古文搜索引擎
go·软件随想