提案:sync/v2:新包 • 问题 #71076 • golang/go

主要观点:考虑引入 sync/v2 包,当前 sync 包中的 sync.Map 和 sync.Pool 类型存在非编译时类型安全和效率低的问题,可通过将其改为泛型类型来解决,引入 sync/v2 包可方便从当前包过渡到新包。
关键信息:

  • math/rand/v2 包已成功,现考虑 sync/v2 包。
  • 当前 sync 包的 Map 和 Pool 类型在 Go 支持泛型前设计,使用 any 不安全且效率低。
  • 可在现有 sync 包中添加新的泛型类型,但会留下混淆的问题,引入 sync/v2 包可避免。
  • sync/v2 包中的类型和函数与当前 sync 包部分相同,如 OnceFunc 等。
  • 当前 sync 包的 Map 类型将被新类型取代,增加 All 方法等,考虑添加 Keys 和 Values 方法。
  • 当前 sync 包的 Pool 类型将被新类型取代,2025 - 01 - 04 新 Pool 版本无导出 New 字段,使用 NewPool 创建,Get 方法返回两个结果。
    重要细节:
  • 兼容性问题导致不能直接在当前 sync 包中将 Map 和 Pool 改为泛型。
  • 引入 sync/v2 包后未来用户需导入 "sync/v2"而非 "sync",可由 goimports 等工具处理。
  • 新的 Map 类型的各种方法功能及参数类型,如 Load、Store 等。
  • 新的 Pool 类型的 NewPool 方法创建方式及 Put、Get 方法功能等。
阅读 7
0 条评论