random

package
v0.51.11 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 4, 2025 License: MIT Imports: 11 Imported by: 2

Documentation

Overview

Package random 雪花算法修改版

时间回拨处理: 1 当相差 15 ms 之内时,等待时间追上 2 当超过 15 ms 时,直接替换节点 id 2.1 需要实现 nextWorkIDFunc 和 backWorkIDFunc 函数

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrSnowflakeWorkerID 无效的 workerID,取值范围 [0, defaultMaxWorkerID]
	ErrSnowflakeWorkerID = errors.New("bad worker id")

	// ErrSnowflakeTimeBackward 时间倒退,当前时间比上一次记录的时间还要小
	ErrSnowflakeTimeBackward = errors.New("time backward")
)

Functions

func Bytes added in v0.42.9

func Bytes(length int) []byte

Bytes 获取指定长度的字符串,包括大小写字母和数字

func Int

func Int(min, max int64) int64

Int 获取指定范围内的整数 返回值 [min, max)

func Lower added in v0.6.2

func Lower(length int) string

Lower 获取指定长度的字符串,仅包含小写字母

func LowerBytes added in v0.42.9

func LowerBytes(length int) []byte

LowerBytes 获取指定长度的字符串,仅包含小写字母

func LowerWithNumber added in v0.26.6

func LowerWithNumber(length int) string

LowerWithNumber 获取指定长度的字符串,包含小写字母和数字

func LowerWithNumberBytes added in v0.42.9

func LowerWithNumberBytes(length int) []byte

LowerWithNumber 获取指定长度的字符串,包含小写字母和数字

func NewUUID

func NewUUID() string

NewUUID 全局唯一标识符,12byte

基于时间戳,主机信息,进程 ID 生成,每次调用值加 1,具有原子性

eg: NewUUID() -> 5cb840f90a5dcd71e779ba64

eg: NewUUID() -> 5cb840f90a5dcd71e779ba65

func Pick added in v0.51.11

func Pick(data []interface{}) (interface{}, error)

Pick 不带权重,直接随机一个

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 SliceShuffle added in v0.35.9

func SliceShuffle[T any](l []T)

SliceShuffle 打乱切片,会改变传入的 l

func String

func String(length int) string

String 获取指定长度的字符串,包括大小写字母和数字

func Uint32

func Uint32() uint32

Uint32 获取随机数,类型为 uint32

func Upper added in v0.6.2

func Upper(length int) string

Upper 获取指定长度的字符串,仅包含大写字母

func UpperBytes added in v0.42.9

func UpperBytes(length int) []byte

Upper 获取指定长度的字符串,仅包含大写字母

func UpperWithNumber added in v0.26.6

func UpperWithNumber(length int) string

UpperWithNumber 获取指定长度的字符串,包含大写字母和数字

func UpperWithNumberBytes added in v0.42.9

func UpperWithNumberBytes(length int) []byte

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)

func (*Chooser[T, W]) Pick added in v0.41.9

func (c *Chooser[T, W]) Pick() T

type Snowflake

type Snowflake struct {
	// contains filtered or unexported fields
}

Snowflake uuid 生成器

func New16Snowflake added in v0.45.11

func New16Snowflake(workerID int) (*Snowflake, error)

New16Snowflake 支持 16 个节点,每个节点每毫秒生成 64 node: [0,15]

生成的 ID: 2024年: 56765078912 2044年: 646299648000384 2054年: 969405235200384

func NewBit46Snowflake added in v0.19.6

func NewBit46Snowflake(workerID int) (*Snowflake, error)

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

func NewSnowflake(workerID int) (*Snowflake, error)

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

func (snowflake *Snowflake) SetOriginTime(originTime int64)

SetOriginTime 设置起始时间

func (*Snowflake) SetWorkIDFunc

func (snowflake *Snowflake) SetWorkIDFunc(nextWorkIDFunc SnowflakeNextWorkIDFunc, backWorkIDFunc SnowflakeBackWorkIDFunc)

SetWorkIDFunc 设置时间回拨超过 15 ms 后,用于处理 workID 的函数

func (*Snowflake) UUID

func (snowflake *Snowflake) UUID() (uint64, error)

UUID 获取 uuid,线程安全

func (*Snowflake) UnsafeUUID

func (snowflake *Snowflake) UnsafeUUID() (uint64, error)

UnsafeUUID 获取 uuid,非线程安全

type SnowflakeBackWorkIDFunc added in v0.19.6

type SnowflakeBackWorkIDFunc func(int) error

SnowflakeBackWorkIDFunc ..

type SnowflakeNextWorkIDFunc added in v0.19.6

type SnowflakeNextWorkIDFunc func() (int, error)

SnowflakeNextWorkIDFunc ..

type WeightHandler added in v0.41.9

type WeightHandler[T any, W integer] func(item T) W

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL