Hacker News 中文摘要

RSS订阅

UUID包将加入Go标准库 -- UUID package coming to Go standard library

文章摘要

该提案建议在Go语言的crypto/uuid包中添加生成和解析UUID的API功能,以简化UUID相关操作。

文章总结

提案:在 crypto/uuid 包中添加生成和解析 UUID 的 API

主要内容

该提案建议在 Go 的标准库中添加一个用于生成和解析 UUID(通用唯一标识符)的包,特别是支持版本 3、4 和 5 的 UUID。以下是提案的主要内容和讨论点:

  1. 背景与动机

    • UUID 是一种广泛使用的标准(RFC 4122),许多其他编程语言(如 C#、Java、JavaScript、Python 和 Ruby)已将其纳入标准库。
    • 目前,Go 开发者通常使用第三方库(如 github.com/google/uuid),该库在服务器和数据库相关的 Go 程序中几乎成为标配依赖。
    • 由于 UUID 的广泛使用和标准化,将其纳入标准库可以减少对外部依赖的需求。
  2. 提案内容

    • 添加一个 crypto/uuid 包,支持生成和解析 UUID。
    • 初始提案聚焦于版本 3、4 和 5,但后续讨论中提到了对版本 7 的支持(UUIDv7 是最新版本,支持时间排序功能)。
  3. 讨论与争议

    • 反对意见认为,第三方库已经足够成熟且易于使用,标准库的更新周期可能无法灵活适应 UUID 标准的演进。
    • 支持者则认为,UUID 是基础设施的一部分,纳入标准库可以简化开发流程并提高一致性。
    • 部分开发者建议仅支持 UUID 生成(如版本 4 和 7),而不支持解析,以遵循 RFC 的建议(将 UUID 视为不透明标识符)。
  4. 技术细节

    • 提案中提供了 API 设计的示例代码,包括生成 UUID 的函数(如 NewV4NewV7)以及解析函数 Parse
    • 讨论了是否添加 NewV7AtTime 函数以支持基于特定时间生成 UUID,但存在对单调递增性保证的担忧。
  5. 后续进展

    • 提案被标记为“可能接受”,但部分功能(如解析)可能被推迟或排除。
    • 相关讨论转移到另一个提案(#76319),聚焦于仅支持 UUID 生成。

总结

该提案旨在将 UUID 支持纳入 Go 标准库,以减少对第三方库的依赖并提高开发效率。尽管存在争议,但多数开发者支持这一改动,尤其是在 UUIDv7 成为新标准后。最终的 API 设计可能会简化,优先支持生成功能。

评论总结

评论总结:

  1. 对Google包不活跃的质疑
  • 认为应关注更活跃的替代方案(gofrs/uuid)(kayson)
  • "Odd to me that the focus seems to be on the inactivity of Google's package"
  1. 对Go语言缺乏基础功能的不满
  • 认为UUID是跨语言互操作的基本需求(cookiengineer)
  • "UUID is essential in pretty much all languages for interoperability"
  • 表达对Go基础功能缺失的沮丧(therealdrag0)
  • "Golang lack of support for basic stuff like this is quite annoying"
  1. 对讨论质量的批评
  • 认为讨论像高中辩论赛般无意义(cookiengineer)
  • "I think I am reading a writeup of a highschool debate club"
  • 认为这是小题大做(vzaliva)
  • "such mundane small tech bit making front page of HN"
  1. 对UUID价值的质疑
  • 认为UUID不需要任何结构(jeffrallen)
  • "UUIDs should be 128 buts of crypto.Rand() and nothing else"
  1. 对功能进展的询问
  • 直接询问该功能是否会实现(didip)
  • "Based on the conversation, is it actually coming?"