ID
随机 ID 与 Snowflake ID
id 提供随机 ID、十六进制 ID 和数字 ID 格式化。雪花 ID 在独立模块 id/snowflake 中,只有安装后才引入对应依赖。
安装
go get github.com/duxweb/runa/id
雪花 ID:
go get github.com/duxweb/runa/id/snowflake
随机 ID
value, err := id.Random(16)
hexValue, err := id.RandomHex(16)
_ = value
_ = hexValue
_ = err
Random(16) 返回 URL 安全字符串,RandomHex(16) 返回 32 位十六进制字符串。
MustRandom
traceID := id.MustRandom(16)
_ = traceID
MustRandom 适合初始化阶段使用,随机源失败时会 panic。
数字格式化
text := id.Format(123456789)
_ = text
Snowflake
import snow "github.com/duxweb/runa/id/snowflake"
generator := snow.MustSnowflake(1)
value, err := generator.New(context.Background())
_ = value
_ = err
常见错误
把随机 ID 当递增主键
id.Random 适合 token、trace id、临时 ID,不适合需要排序的数据库主键。需要大致有序的 ID 可以考虑 Snowflake。
所有机器使用同一个 Snowflake nodeID
多实例部署时,每个实例的 nodeID 应不同,否则可能生成重复 ID。
在请求热路径里反复创建生成器
Snowflake generator 应该初始化一次后复用,不要每次请求都重新创建。
API 速查
id.Random(size)生成随机字符串id.MustRandom(size)生成随机字符串或 panicid.RandomHex(size)生成十六进制字符串id.Format(value)格式化数字 IDsnowflake.NewSnowflake(nodeID)创建雪花 ID 生成器snowflake.MustSnowflake(nodeID)创建生成器或 panic