文章摘要
该提案建议在Go语言的crypto/uuid包中添加生成和解析UUID的API功能,以简化UUID相关操作。
文章总结
提案:在 crypto/uuid 包中添加生成和解析 UUID 的 API
主要内容
该提案建议在 Go 的标准库中添加一个用于生成和解析 UUID(通用唯一标识符)的包,特别是支持版本 3、4 和 5 的 UUID。以下是提案的主要内容和讨论点:
背景与动机:
- UUID 是一种广泛使用的标准(RFC 4122),许多其他编程语言(如 C#、Java、JavaScript、Python 和 Ruby)已将其纳入标准库。
- 目前,Go 开发者通常使用第三方库(如
github.com/google/uuid),该库在服务器和数据库相关的 Go 程序中几乎成为标配依赖。 - 由于 UUID 的广泛使用和标准化,将其纳入标准库可以减少对外部依赖的需求。
提案内容:
- 添加一个
crypto/uuid包,支持生成和解析 UUID。 - 初始提案聚焦于版本 3、4 和 5,但后续讨论中提到了对版本 7 的支持(UUIDv7 是最新版本,支持时间排序功能)。
- 添加一个
讨论与争议:
- 反对意见认为,第三方库已经足够成熟且易于使用,标准库的更新周期可能无法灵活适应 UUID 标准的演进。
- 支持者则认为,UUID 是基础设施的一部分,纳入标准库可以简化开发流程并提高一致性。
- 部分开发者建议仅支持 UUID 生成(如版本 4 和 7),而不支持解析,以遵循 RFC 的建议(将 UUID 视为不透明标识符)。
技术细节:
- 提案中提供了 API 设计的示例代码,包括生成 UUID 的函数(如
NewV4和NewV7)以及解析函数Parse。 - 讨论了是否添加
NewV7AtTime函数以支持基于特定时间生成 UUID,但存在对单调递增性保证的担忧。
- 提案中提供了 API 设计的示例代码,包括生成 UUID 的函数(如
后续进展:
- 提案被标记为“可能接受”,但部分功能(如解析)可能被推迟或排除。
- 相关讨论转移到另一个提案(#76319),聚焦于仅支持 UUID 生成。
总结
该提案旨在将 UUID 支持纳入 Go 标准库,以减少对第三方库的依赖并提高开发效率。尽管存在争议,但多数开发者支持这一改动,尤其是在 UUIDv7 成为新标准后。最终的 API 设计可能会简化,优先支持生成功能。
评论总结
评论总结:
- 对Google包不活跃的质疑
- 认为应关注更活跃的替代方案(gofrs/uuid)(kayson)
- "Odd to me that the focus seems to be on the inactivity of Google's package"
- 对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"
- 对讨论质量的批评
- 认为讨论像高中辩论赛般无意义(cookiengineer)
- "I think I am reading a writeup of a highschool debate club"
- 认为这是小题大做(vzaliva)
- "such mundane small tech bit making front page of HN"
- 对UUID价值的质疑
- 认为UUID不需要任何结构(jeffrallen)
- "UUIDs should be 128 buts of crypto.Rand() and nothing else"
- 对功能进展的询问
- 直接询问该功能是否会实现(didip)
- "Based on the conversation, is it actually coming?"