diff --git a/CHANGELOG.md b/CHANGELOG.md index 54b46b0..e8ac35a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +#### v0.7.1 + +- package snowflake + - [feat] 新增的包,分布式唯一性64位ID生成器 + #### v0.7.0 - package consistenthash: diff --git a/README.md b/README.md index 14e4476..db48a12 100644 --- a/README.md +++ b/README.md @@ -29,11 +29,13 @@ Go语言基础库 ``` pkg/ ...... 源码包 |-- bininfo/ ...... 将编译时源码的 git 版本信息(当前 commit log 的 sha 值和 commit message),编译时间,Go 版本,平台打入程序中 + |-- snowflake/ ...... 分布式唯一性 ID 生成器 + |-- bitrate/ ...... 计算带宽 + |-- consistenthash/ ...... 一致性哈希 |-- nazalog/ ...... 日志库 |-- slicebytepool/ ...... []byte 内存池 |-- assert/ ...... 提供了单元测试时的断言功能,减少一些模板代码 |-- nazastring/ ...... string 和 []byte 相关的操作 - |-- consistenthash/ ...... 一致性哈希 |-- bele/ ...... 提供了大小端的转换操作 |-- nazaatomic/ ...... 原子操作 |-- nazajson/ ...... json 操作 @@ -41,8 +43,6 @@ pkg/ ...... 源码包 |-- connection/ ...... 对 net.Conn 接口的二次封装 |-- filebatch/ ...... 文件批处理操作 |-- nazamd5/ ...... md5 操作 - |-- snowflake/ ...... 分布式唯一性 ID 生成器 - |-- bitrate/ ...... 计算带宽 |-- ratelimit/ ...... 限流器,令牌桶 |-- ic/ ...... 将整型切片压缩成二进制字节切片 |-- unique/ ...... 对象唯一 ID @@ -65,6 +65,7 @@ naza 即哪吒(正确拼音为 nezha,我女儿发音读作 naza,少一个 * [Go创建对象时,如何优雅的传递初始化参数](https://pengrl.com/p/60015/) +* pkg/snowflake [https://pengrl.com/p/20041/](分布式ID生成算法snowflake介绍及Go语言实现) * pkg/bininfo [给Go程序加入编译版本时间等信息](https://https://pengrl.com/p/37397/) #### 联系我 diff --git a/pkg/snowflake/snowflake.go b/pkg/snowflake/snowflake.go index dfebb78..6396993 100644 --- a/pkg/snowflake/snowflake.go +++ b/pkg/snowflake/snowflake.go @@ -96,6 +96,7 @@ func (n *Node) Gen(nowUnixMSec ...int64) (int64, error) { // 时间戳相同时,使用递增序号解决冲突 if now == n.lastTs { n.seq = (n.seq + 1) & n.seqMask + // 递增序号翻转为 0,表示该时间戳下的序号已经全部用完,阻塞等待系统时间增长 if n.seq == 0 { for now <= n.lastTs { now = time.Now().UnixNano() / 1e6