Go 1.23 已经发布,所以现在是探索新功能的好时机。官方发布说明有一些枯燥,我们总结了一个列表版本,展示了哪些变化以及新行为是什么。
range-over-func:在 "for-range" 循环中,现在可以使用迭代器函数作为 range 表达式,如 func (func (K) bool)
。这支持用户自定义任意序列的迭代器,增强了 Go 语言在处理复杂数据结构时的灵活性和表达力。标准库的 slices 和 maps 包也添加了支持迭代器的新功能。
Go 1.23 包含了对泛型类型别名的预览支持。启用 GOEXPERIMENT=aliastypeparams
可以在包内使用泛型类型别名(跨包使用暂不支持)。这是 Go 语言在类型系统上的重大突破,使得开发者能够创建通用类型,从而减少重复代码并提高代码的复用性。
引入了一个可选的遥测系统,用于收集 Go 工具链的使用情况和错误统计,以帮助理解 Go 工具链的使用情况和效果。通过 go telemetry on
命令可以启用遥测系统,但默认不开启。
go env -changed:显示与默认值不同的环境变量设置,方便开发者追踪和管理环境依赖。
go mod tidy -diff:提供预览 go.mod
和 go.sum
文件变更的功能,无需实际修改文件,便于开发者提前评估更改影响。
go vet 增强:现在可以报告对于目标 Go 版本来说过新的符号,有助于开发者在向新版本迁移时发现问题并及时解决。
iter 包:支持迭代器相关功能,增强对复杂数据结构的处理能力。
structs 包:定义用于修改结构体属性的标记类型,简化结构体操作。
unique 包:提供工具用于实现值的 interning(类似于“字符串驻留”或“哈希压缩”),提高内存使用效率。
time 包优化:改进了 time.Timer
和 time.Ticker
的实现,提高了时间相关操作的性能和准确性。
slices 包新增 Repeat 方法:该方法会返回一个新的切片,函数的作用是将所提供的切片,按给定的次数进行重复。
os.DirFS 方法:返回以目录 dir 为根的文件树的文件系统(fs.FS),再结合 os.CopyFS
方法可以实现一次性的递归复制文件和目录。
panic 函数改进:在新版本中,panic 函数会用制表符缩进错误信息的第二行和后续行,以区别于第一个 goroutine 的堆栈跟踪。
net.http 标准库新增 ParseCookie 和 ParseSetCookie 方法:这两个方法用于从 Cookie 标头字符串中提取 Cookie 结构体,使得处理 Cookie 变得更加方便和直接。
编译器优化:通过重叠函数中局部变量的栈帧槽位,减少了栈的使用,并通过 Profile Guided Optimization(PGO)改善了编译时间。
链接器限制:链接器现在不允许使用 //go:linkname
指令引用未标记 //go:linkname
的标准库内部符号,除非这些符号已有较大使用量。
操作系统要求:Go 1.23 开始要求 macOS 11 Big Sur 或更高版本,是最后一个支持 Linux 2.6.32 及更高版本的发行版,Go 1.24 将要求 Linux 3.17 或更高版本。
ARM64 和 RISC-V:引入了新的环境变量 GOARM64
和 GORISCV64
,用于指定 ARM64 和 RISC-V 目标架构版本。
Go 1.23 的发布标志着 Go 语言在标准化和工具集方面的持续进步,为开发者提供了更加高效、灵活的编程环境。这些新特性和改进不仅提升了 Go 语言本身的竞争力,也为开发者社区的创新提供了更多可能性。
相关参考:
https://pkg.go.dev/math/big
编辑:万能的大雄
本文为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。