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 build 和 go 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 催更。

相关推荐
喵个咪20 小时前
GoWind 拆解:全链 ID 类型体系——int64 定版与前端字符串化契约
前端·后端·go
喵个咪20 小时前
GoWind CMS 拆解:发布审批——多级推进、逐级角色与全程留痕
前端·后端·go
喵个咪20 小时前
GoWind Flow 拆解:一个 Go 工作流引擎与它的双模式设计器
前端·后端·go
喵个咪21 小时前
GoWind CMS 拆解:搜索三板斧——高亮、联想、同义词
后端·搜索引擎·go
喵个咪21 小时前
GoWind 拆解:AI Agent 编排引擎——波次并行、子图递归与人工审批
人工智能·后端·go
喵个咪21 小时前
GoWind Admin 拆解:打印模板设计器——从画布到服务端 PDF 的完整打印链路
前端·后端·go
喵个咪1 天前
GoWind Admin 拆解:BI 大屏设计器——schema 即 JSON、resolver 注入与三张快照表的口径谱系
大数据·后端·go
Warson_L1 天前
高性能架构设计
python·go
我不会起名字3222 天前
Redis 从 0 到 1(三十七·收官):36 篇浓缩成 1 张知识地图 + 50 项生产 Checklist
redis·go·知识体系·checklist·收官
Mz码不住2 天前
用 Wails 写一个跨平台进程管理器
go