Go 1.24 版本发布了,今天我们说几个值得重点关注的新特性,主要是:漏洞修复和安全性提高、性能优化、功能增强这三大块。
漏洞修复主要是对于标准库 os 中文件系统的部分增强了特定目录中执行文件系统操作能力,用于防止目录遍历的漏洞。
新增了os.Root
的类型,其提供了在特定目录中执行文件系统操作的能力。整个体系是围绕着这个新类型进行的。
安全性提高方面 Go1.24 在标准库 crypto 将会支持 FIPS140 标准,迈向更进一步的安全合规,这个平时做业务开发大概率用不到,有兴趣的可以了解一下。
性能优化中,首先要关注的是 mutex 的性能优化,旧版本中随着 GOMAXPROCS 的增加,mutex 的性能明显下降,原因是当前的mutex实现虽然理论上允许线程睡眠,但实际上导致所有线程都在自旋,带来了不少的性能损耗。新版本中通过给mutex增加标识位减少了不必要的线程切换。
再有一个就是sync.Map 的性能优化了
功能增强方面首先是JSON格式化时支持省略零值,看到这了你可能有疑问啦,不是本来就有 omitempty 这个结构体Tag 支持JSON格式化时省略掉空值吗?空值、零值我也被它这个起名搞晕了,看代码吧。
type Person struct {
Name string `json:"name"`
BirthDate time.Time `json:"birth_date,omitempty"`
}
以前我们给time.Time类型的字段,如果在对象里没有设置,JSON格式化的时候会是下面这个默认值
{"name":"xxx","birth_date":"0001-01-01T00:00:00Z"}
新特性里给字段的Tag中加上 omitzero
type Person struct {
Name string `json:"name"`
BirthDate time.Time `json:"birth_date,omitzero"`
}
再做JSON格式化的时候就不会有这个问题了,直接把birth_date这个字段省略掉了。
{"name":"xxx"}
此外在新版本中还有对泛型的增强,以及strings库中增加了不少新的迭代器方法。
本文中的案例分析转载自煎鱼的公众号,煎鱼因为基础架构工作关注Go新特性较多,大家可以关注一下。
另外如果你是新手光看特性和源码分析大概率是没法开始用Go开发项目的,还需要更多掌握工程化实践才行,这里推荐一下我的专栏《Go项目搭建和整洁开发实战》,专栏已更新完成,还搭配一个从0记录开发过程的实战项目,无论你是新手还是老手都用的上。