大家好,我是煎鱼。
关于 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 特性系列
- Go1.22 新特性:增强 http.ServerMux 路由能力,将有更强的表现力!
- Go1.22 新特性:for 循环不再共享循环变量,且支持整数范围
- 为什么 Go1.22 for 循环要支持整数范围?
- Go1.22 新特性:Slices 变更 Concat、Delete、Insert 等函数,对开发挺有帮助!
- Go1.22 新特性:新的 math/rand/v2 库,更快更标准!
文章持续更新,可以微信搜【脑子进煎鱼了】阅读,本文 GitHub github.com/eddycjy/blo... 已收录,学习 Go 语言可以看 Go 学习地图和路线,欢迎 Star 催更。