跳到主要内容

ID 生成

id 包提供可插拔的唯一标识符生成,内置两种策略。

快速开始

import "github.com/coldsmirk/vef-framework-go/id"

// 默认:XID(大多数场景推荐)
xid := id.Generate()
// → "9m4e2mr0ui3e8a215n4g"(20 字符,base32 编码)

// UUID v7(需要 RFC 4122 兼容时使用)
uuid := id.GenerateUUID()
// → "018f4e42-832a-7123-9abc-def012345678"(36 字符)

内置生成器

XID(默认)

XID 是框架的默认 ID 生成策略,在性能和唯一性之间取得了最佳平衡。

属性
格式20 字符 base32 字符串(0-9, a-v
可排序✅ 基于时间排序
全局唯一✅ 机器 ID + 计数器
性能所有策略中最优
xid := id.Generate()

UUID v7

UUID v7 提供基于时间的排序,遵循 RFC 4122 标准。

属性
格式36 字符 UUID(xxxxxxxx-xxxx-7xxx-xxxx-xxxxxxxxxxxx
可排序✅ 基于时间排序
RFC 兼容✅ RFC 4122
使用场景外部系统需要 UUID 时
uuid := id.GenerateUUID()

IDGenerator 接口

通过实现 IDGenerator 接口来自定义 ID 生成器:

type IDGenerator interface {
Generate() string
}

框架使用默认的 XID 生成器(id.DefaultXIDGenerator)来生成模型主键。orm 包在插入 ID 为空的记录时会自动调用 id.Generate()

预构建生成器实例

id.DefaultXIDGenerator  // *XIDGenerator 单例
id.DefaultUUIDGenerator // *UUIDGenerator 单例

何时使用哪种

场景建议
通用应用 IDid.Generate()(XID)
外部 API 集成id.GenerateUUID()(UUID v7)
需要自定义格式实现 IDGenerator 接口