Documentation
¶
Overview ¶
Package random 雪花算法修改版
时间回拨处理: 1 当相差 15 ms 之内时,等待时间追上 2 当超过 15 ms 时,直接替换节点 id 2.1 需要实现 nextWorkIDFunc 和 backWorkIDFunc 函数
Index ¶
- Variables
- func Bytes(length int) []byte
- func Int(min, max int64) int64
- func Lower(length int) string
- func LowerBytes(length int) []byte
- func LowerWithNumber(length int) string
- func LowerWithNumberBytes(length int) []byte
- func NewUUID() string
- func Pick(data []interface{}) (interface{}, error)
- func PickOnce[T any, W integer](items []T, getWeight WeightHandler[T, W]) T
- func SetSnowflakeTestTimebackward(able bool)
- func SliceShuffle[T any](l []T)
- func String(length int) string
- func Uint32() uint32
- func Upper(length int) string
- func UpperBytes(length int) []byte
- func UpperWithNumber(length int) string
- func UpperWithNumberBytes(length int) []byte
- type Choice
- type Chooser
- type Snowflake
- type SnowflakeBackWorkIDFunc
- type SnowflakeNextWorkIDFunc
- type WeightHandler
Constants ¶
This section is empty.
Variables ¶
var ( // ErrSnowflakeWorkerID 无效的 workerID,取值范围 [0, defaultMaxWorkerID] ErrSnowflakeWorkerID = errors.New("bad worker id") // ErrSnowflakeTimeBackward 时间倒退,当前时间比上一次记录的时间还要小 ErrSnowflakeTimeBackward = errors.New("time backward") )
Functions ¶
func LowerWithNumber ¶ added in v0.26.6
LowerWithNumber 获取指定长度的字符串,包含小写字母和数字
func LowerWithNumberBytes ¶ added in v0.42.9
LowerWithNumber 获取指定长度的字符串,包含小写字母和数字
func NewUUID ¶
func NewUUID() string
NewUUID 全局唯一标识符,12byte
基于时间戳,主机信息,进程 ID 生成,每次调用值加 1,具有原子性
eg: NewUUID() -> 5cb840f90a5dcd71e779ba64
eg: NewUUID() -> 5cb840f90a5dcd71e779ba65
func PickOnce ¶ added in v0.41.9
func PickOnce[T any, W integer](items []T, getWeight WeightHandler[T, W]) T
func SetSnowflakeTestTimebackward ¶
func SetSnowflakeTestTimebackward(able bool)
SetSnowflakeTestTimebackward 测试时间回退
func UpperWithNumber ¶ added in v0.26.6
UpperWithNumber 获取指定长度的字符串,包含大写字母和数字
func UpperWithNumberBytes ¶ added in v0.42.9
UpperWithNumber 获取指定长度的字符串,包含大写字母和数字
Types ¶
type Choice ¶ added in v0.41.9
type Choice[T any, W integer] struct { Item T Weight W }
Choice 每一个选项
type Chooser ¶ added in v0.41.9
type Chooser[T any, W integer] struct { // contains filtered or unexported fields }
Chooser 选择器
func NewChooser ¶ added in v0.41.9
func NewChooser[T any, W integer](items []T, getWeight WeightHandler[T, W]) (*Chooser[T, W], error)
type Snowflake ¶
type Snowflake struct {
// contains filtered or unexported fields
}
Snowflake uuid 生成器
func New16Snowflake ¶ added in v0.45.11
New16Snowflake 支持 16 个节点,每个节点每毫秒生成 64 node: [0,15]
生成的 ID: 2024年: 56765078912 2044年: 646299648000384 2054年: 969405235200384
func NewBit46Snowflake ¶ added in v0.19.6
NewBit46Snowflake 缩短长度版本的 Snowflake,uint64 在一些脚本语言中默认会呈科学计数法显示甚至精度丢失 而平常并不需要这么长的长度 如 javascript 超过 2^53 9007199254740992 有可能会精度丢失。6145390195186705111 显示为 6145390195186705000 不能超过 16 位
workID 取值 [0,1]
配置:
0(1 bit) - 毫秒时间戳(41 bit) - 节点 id(1 bit) - 序列号(3 bit)
毫秒时间戳(41 bit):存储毫秒时间戳,取值范围 [0,1<<41),目前存储的是当前毫秒时间戳与 originTime 的差值,可以在 69 年内保障唯一,可以设置 SetOriginTime 修改这 69 年的起始时间
节点 id(1 bit): 可以分布在 2 个节点上
序列号(3 bit):每毫秒可以生成 15 个 UUID
func NewSnowflake ¶
NewSnowflake 创建默认生成器 workID 取值 [0,1023]
配置:
0(1 bit) - 毫秒时间戳(41 bit) - 节点 id(10 bit) - 序列号(12 bit)
毫秒时间戳(41 bit):存储毫秒时间戳,取值范围 [0,1<<41),目前存储的是当前毫秒时间戳与 originTime 的差值,可以在 69 年内保障唯一,可以设置 SetOriginTime 修改这 69 年的起始时间
节点 id(10 bit): 可以分布在 1023 个节点上
序列号(12 bit):每毫秒可以生成 4095 个 UUID
func NewSnowflakeBy ¶
func NewSnowflakeBy(workerID int, originTime int64, workerIDBits int, sequenceBits int, nextWorkIDFunc SnowflakeNextWorkIDFunc, backWorkIDFunc SnowflakeBackWorkIDFunc) (*Snowflake, error)
NewSnowflakeBy 创建生成器
func (*Snowflake) SetOriginTime ¶
SetOriginTime 设置起始时间
func (*Snowflake) SetWorkIDFunc ¶
func (snowflake *Snowflake) SetWorkIDFunc(nextWorkIDFunc SnowflakeNextWorkIDFunc, backWorkIDFunc SnowflakeBackWorkIDFunc)
SetWorkIDFunc 设置时间回拨超过 15 ms 后,用于处理 workID 的函数
func (*Snowflake) UnsafeUUID ¶
UnsafeUUID 获取 uuid,非线程安全
type SnowflakeBackWorkIDFunc ¶ added in v0.19.6
SnowflakeBackWorkIDFunc ..
type SnowflakeNextWorkIDFunc ¶ added in v0.19.6
SnowflakeNextWorkIDFunc ..
type WeightHandler ¶ added in v0.41.9
type WeightHandler[T any, W integer] func(item T) W