# README
unique

用于生成一个唯一字符串
// 生成由数字和字母组成的唯一字符串,比如 p4k5f81
u := unique.NewString(10)
go u.Serve(context.Background())
u.String()
// 生成由数字组成的唯一字符串,比如 15193130121
u := unique.NewNumber(10)
go u.Serve(context.Background())
u.String()
// 生成由日期与数字组成的唯一字符串,比如 20180222232332-1
u := unique.NewDate(10)
go u.Serve(context.Background())
u.String()
// 或者可以自定义一个 Unique 实例
u := unique.New(10, time.Second, "20060102150405-", 10)
go u.Serve(context.Background())
u.String() // 生成唯一字符串。
安装
go get github.com/issue9/unique/v2
版权
# Functions
New 声明一个新的 [Unique]
每一秒,最多能产生 [math.MaxInt64] 个唯一值,需求量超过此值的不适合。
bufferSize 缓存大小,不能小于 1; duration 计数器的重置时间,不能小于 1*time.Second; prefixFormat 格式化 prefix 的方式,若指定,则格式化为时间,否则将时间戳转换为数值; base 数值转换成字符串时,所采用的进制,可以是 [2,36] 之间的值。.
NewDate 声明以日期形式表示的 [Unique] 实例
格式为:20180222232332-1.
NewNumber 声明以数字形式表示的 [Unique] 实例
格式为:15193130121.
NewRands 声明 [Rands]
bufferSize 负责初始化 [Unique] 和 [rands.Rands] 对象; r, min, max, bs 负责初始化 [rands.Rands] 对象;.
NewString 声明以字符串形式表示的 [Unique] 实例
格式为:p4k5f81.
# Structs
Rands 生成唯一的随机字符串
[Rands] 由两部分组成: - [Unique] 负责保证字符串的唯一性,但是内容是有序的; - [rands.Rands] 负责生成混淆的随机字符;
两者结合可以保证生成的内容唯一且无序。相较于 [Unique] 此对象更具有随机性。.
Unique 基于时间戳的唯一不定长字符串
Unique 由两部分组成: 前缀是由一个相对稳定的字符串,与时间相关联; 后缀是一个自增的数值。
每次刷新前缀之后,都会重置后缀的计数器,从头开始。 刷新时间和计数器的步长都是一个随机数。
NOTE: 算法是基于系统时间的。所以必须得保证时间上正确的,否则可能会造成非唯一的情况。 NOTE: 产生的数据有一定的顺序规则。.