Documentation
¶
Overview ¶
Package snowflake 提供基于 Snowflake 位布局的分布式唯一 ID 生成能力。
NewNode 使用当前的 Epoch、NodeBits 和 StepBits 创建生成节点。调用方需要为每个 节点分配唯一的 nodeid,并在调整 Epoch 或位宽配置后重新创建节点,确保生成与解析 使用同一组位布局。
生成的 ID 支持十进制、Base2、z-base-32、Base36、Base58、Base64 以及字节表示, 并可通过对应的 Parse* 函数恢复。Time、Node 和 Step 等字段提取方法保留用于兼容旧 版本,它们依赖当前的全局位宽配置。
Index ¶
- Variables
- type ID
- func ParseBase2(id string) (ID, error)
- func ParseBase32(b []byte) (ID, error)
- func ParseBase36(id string) (ID, error)
- func ParseBase58(b []byte) (ID, error)
- func ParseBase64(id string) (ID, error)
- func ParseBytes(id []byte) (ID, error)
- func ParseInt64(id int64) ID
- func ParseIntBytes(id [8]byte) ID
- func ParseString(id string) (ID, error)
- func (f ID) Base2() string
- func (f ID) Base32() string
- func (f ID) Base36() string
- func (f ID) Base58() string
- func (f ID) Base64() string
- func (f ID) Bytes() []byte
- func (f ID) Int64() int64
- func (f ID) IntBytes() [8]byte
- func (f ID) MarshalJSON() ([]byte, error)
- func (f ID) Node() int64deprecated
- func (f ID) Step() int64deprecated
- func (f ID) String() string
- func (f ID) Time() int64deprecated
- func (f *ID) UnmarshalJSON(b []byte) error
- type JSONSyntaxError
- type Node
Constants ¶
This section is empty.
Variables ¶
var ( // Epoch 表示 Snowflake 算法的起始时间戳,单位为毫秒。 // 默认值为项目约定的毫秒时间戳 1740515125000。 // 调用方如需自定义,应在调用 NewNode 创建节点前完成配置。 Epoch int64 = 1740515125000 // NodeBits 表示节点编号占用的比特数。 // NodeBits 和 StepBits 总和不能超过 22,调用方应在调用 NewNode 前完成配置。 NodeBits uint8 = 10 // StepBits 表示同一毫秒内序列号占用的比特数。 // NodeBits 和 StepBits 总和不能超过 22,调用方应在调用 NewNode 前完成配置。 StepBits uint8 = 12 )
var ( // ErrInvalidBase58 表示 Base58 解析遇到未定义字符。 // ParseBase58 返回该错误时结果值为 -1,调用方可使用 errors.Is 判断该错误。 ErrInvalidBase58 = errors.New("invalid base58") // ErrInvalidBase32 表示 z-base-32 解析遇到未定义字符。 // ParseBase32 返回该错误时结果值为 -1,调用方可使用 errors.Is 判断该错误。 ErrInvalidBase32 = errors.New("invalid base32") )
Functions ¶
This section is empty.
Types ¶
type ID ¶
type ID int64
ID 表示 Snowflake 生成的唯一标识。
func ParseBase2 ¶
ParseBase2 将二进制字符串解析为 ID。
参数:
- id: 待解析的二进制字符串。
返回:
- ID: 解析成功时得到的 ID;解析失败时为 strconv.ParseInt 的中间结果,不应继续使用。
- error: id 不是合法二进制整数或超出 int64 范围时返回 strconv.ParseInt 的错误。
func ParseBase32 ¶
ParseBase32 将 z-base-32 字节切片解析为 ID。
ParseBase32 使用本包内置的 z-base-32 字符表,不执行 int64 溢出检测。
参数:
- b: 待解析的 z-base-32 编码字节切片。
返回:
- ID: 解析成功时得到的 ID;遇到非法字符时返回 -1。
- error: b 包含未定义字符时返回 ErrInvalidBase32,调用方可使用 errors.Is 判断。
func ParseBase36 ¶
ParseBase36 将 base36 字符串解析为 ID。
参数:
- id: 待解析的 base36 字符串。
返回:
- ID: 解析成功时得到的 ID;解析失败时为 strconv.ParseInt 的中间结果,不应继续使用。
- error: id 不是合法 base36 整数或超出 int64 范围时返回 strconv.ParseInt 的错误。
func ParseBase58 ¶
ParseBase58 将 Base58 字节切片解析为 ID。
ParseBase58 使用本包内置字符表,不执行 int64 溢出检测。
参数:
- b: 待解析的 Base58 编码字节切片。
返回:
- ID: 解析成功时得到的 ID;遇到非法字符时返回 -1。
- error: b 包含未定义字符时返回 ErrInvalidBase58,调用方可使用 errors.Is 判断。
func ParseBase64 ¶
ParseBase64 将 base64 字符串解析为 ID。
ParseBase64 先使用 base64.StdEncoding 解码,再按 Bytes 的十进制字节表示解析。
参数:
- id: 待解析的 base64 字符串。
返回:
- ID: 解析成功时得到的 ID;base64 解码失败时返回 -1,十进制解析失败时返回 ParseBytes 的结果。
- error: id 不是合法 base64 字符串时返回解码错误;解码后内容不是合法十进制整数或超出 int64 范围时返回 strconv.ParseInt 的错误。
func ParseBytes ¶
ParseBytes 将十进制字符串字节切片解析为 ID。
参数:
- id: 待解析的十进制字符串字节切片。
返回:
- ID: 解析成功时得到的 ID;解析失败时为 strconv.ParseInt 的中间结果,不应继续使用。
- error: id 不是合法十进制整数或超出 int64 范围时返回 strconv.ParseInt 的错误。
func ParseIntBytes ¶
ParseIntBytes 将八字节大端整数表示转换为 ID。
参数:
- id: 按 binary.BigEndian 编码的八字节整数数组。
返回:
- ID: 从 id 还原得到的 Snowflake ID。
func ParseString ¶
ParseString 将十进制字符串解析为 ID。
参数:
- id: 待解析的十进制字符串。
返回:
- ID: 解析成功时得到的 ID;解析失败时为 strconv.ParseInt 的中间结果,不应继续使用。
- error: id 不是合法十进制整数或超出 int64 范围时返回 strconv.ParseInt 的错误。
func (ID) Base32 ¶
Base32 返回当前 ID 的 z-base-32 编码字符串。
Base32 使用本包内置的 z-base-32 字符表,不保证与标准库 base32 编码互通。
参数:无。
返回:
- string: 使用 z-base-32 编码的 ID 字符串。
func (ID) Base58 ¶
Base58 返回当前 ID 的 Base58 编码字符串。
Base58 使用本包内置字符表,排除了 0、O、I 和 l 等易混淆字符。
参数:无。
返回:
- string: 使用 Base58 编码的 ID 字符串。
func (ID) Base64 ¶
Base64 返回当前 ID 十进制字节表示的 base64 编码字符串。
参数:无。
返回:
- string: 对 Bytes 返回值执行 base64.StdEncoding 后得到的字符串。
func (ID) IntBytes ¶
IntBytes 返回当前 ID 的八字节大端整数表示。
参数:无。
返回:
- [8]byte: 按 binary.BigEndian 写入的 ID 整数字节数组。
func (ID) MarshalJSON ¶
MarshalJSON 实现 JSON 序列化,将 ID 编码为带引号的十进制字符串。
参数:无。
返回:
- []byte: JSON 字符串字面量形式的 ID。
- error: 当前实现始终返回 nil。
func (*ID) UnmarshalJSON ¶
UnmarshalJSON 实现 JSON 反序列化,将带引号的十进制字符串解析为 ID。
调用方应使用非 nil 的 ID 指针接收结果;解析成功后才会覆盖接收者。
参数:
- b: JSON 字节切片,必须是带引号的十进制字符串。
返回:
- error: b 不是带引号字符串时返回 JSONSyntaxError;十进制内容无法解析或超出 int64 范围时返回 strconv.ParseInt 的错误。
type JSONSyntaxError ¶
type JSONSyntaxError struct {
// contains filtered or unexported fields
}
JSONSyntaxError 表示 JSON 反序列化时遇到非法 ID 形态的错误类型。
func (JSONSyntaxError) Error ¶
func (j JSONSyntaxError) Error() string
Error 返回 JSONSyntaxError 的错误描述。
参数:无。
返回:
- string: 包含原始 JSON 字节内容的错误消息。
type Node ¶
type Node interface {
// Generate 生成一个新的 Snowflake ID。
//
// 参数:无。
//
// 返回:
// - ID: 由当前节点生成的唯一 ID。
Generate() ID
}
Node 定义生成 Snowflake ID 的节点能力。