Go 1.25 计划于 8 月发布,是探索新特性的好时机。官方发布说明较枯燥,作者准备了互动版本并举例说明变化和新行为。
- 合成时间用于测试(#synthetic-time-for-testing):
testing/synctest
包可用于测试超时情况,通过内部使用假时钟让测试快速通过,避免实际等待 60 秒。同时介绍了synctest.Test
和synctest.Wait
函数的使用,以及相关提案和提交。 - JSON v2(#json-v2):
json/v2
包是json
包的重大更新,有很多破坏性变化。示例展示了如何使用自定义的 marshaler 和 unmarshaler 对不同类型进行序列化和反序列化,还介绍了其他新特性,如支持 I/O 读写、嵌套对象内联等,并鼓励查看关于 v2 变化的专门文章。 - 感知容器的 GOMAXPROCS(#container-aware-gomaxprocs):
GOMAXPROCS
控制 Go 调度器可用于并发执行 goroutine 的操作系统线程的最大数量。在 Go 1.5 后默认值为runtime.NumCPU
。Go 程序常在容器中运行,新特性可让 Go 运行时尊重容器的 CPU 配额,设置GOMAXPROCS
手动或自动更新,还可通过环境变量或函数设置默认值,并提供向后兼容的设置。 - 绿茶垃圾收集器(#green-tea-garbage-collector):Green Tea 是为创建大量小对象且在多 CPU 核心计算机上运行的程序优化的新实验性垃圾收集器,采取不同扫描方式提高效率,减少垃圾收集开销,可通过设置
GOEXPERIMENT=greenteagc
启用,设计和实现可能在未来版本中变化。 - CSRF 保护(#csrf-protection):
http.CrossOriginProtection
类型可防止跨站请求伪造(CSRF),通过检查Sec-Fetch-Site
头和比较 Origin 与 Host 头来检测跨域请求,示例展示了如何启用和配置 CSRF 保护,以及不同情况下服务器的处理方式。 - Go wait group,go!(#go-wait-group-go):新的
WaitGroup.Go
方法自动增加等待组计数器、在 goroutine 中运行函数并在完成时减少计数器,简化了使用 wait group 的代码,该实现已添加 13 年。 - 飞行记录(#flight-recording):飞行记录是一种跟踪技术,
runtime/trace#FlightRecorder
类型可在 Go 中实现飞行记录,示例展示了如何配置和使用飞行记录器,以及如何保存和查看跟踪快照。 - 更多 Root 方法(#more-root-methods):
os.Root
类型新增多个类似os
包中的函数方法,如Chmod
、Chown
等,用于操作文件系统,os.DirFS()
和os.Root.FS()
返回的文件系统实现了新的fs.ReadLinkFS
接口,不一致的命名令人惊讶。 - 反射类型断言(#reflective-type-assertion):新的
reflect.TypeAssert
函数可更 idiomatic 地将reflect.Value
转换回特定类型,避免不必要的内存分配。 - 测试属性和朋友(#test-attributes-and-friends):
T.Attr
方法可添加测试信息,T.Output
方法可访问测试输出流,testing.AllocsPerRun
函数在并行测试运行时会 panic 以帮助捕获错误。 - 分组日志属性(#grouped-attributes-for-logging):
slog.GroupAttrs
函数可从给定的slog.Attr
创建分组,解决slog.Group
期望slog.Attr
切片的问题。 - 哈希克隆器(#hash-cloner):
hash.Cloner
接口定义了可返回当前状态副本的哈希函数,标准库的hash.Hash
实现都提供了Clone
函数。 - 最终思考(#final-thoughts):Go 1.25 最终确定了对测试并发代码的支持,引入了主要的实验性 JSON 包,改进了运行时,添加了飞行记录器、现代 CSRF 保护、等待组快捷方式等其他改进,是一个很棒的版本,还可查看其他 Go 版本的特性或学习 Go 的相关内容并订阅获取新文章。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。