package snowflake
import (
"fmt"
"sync"
"time"
)
type Snowflake struct {
sync.Mutex
TimeStamp int64
WorkerID int64
DataCentrail int64
Sequence int64
Mtl int64
}
const (
// 起始时间戳
epoch = int64(1609430400000)
// 时间戳所占的位数
timestampBits = uint(41)
// 机器ID所占位数
workerIDBits = uint(9)
// 时间线所占位数
timeLineBits = uint(1)
// 序列号所占位数
sequenceBits = uint(12)
// 时间戳最大数
timeStampMax = (-1 ^ (-1 << timestampBits))
// 机器ID最大数
workerIDMax = (-1 ^ (-1 << workerIDBits))
// 时间线最大的数
timeLineMax = (-1 ^ (-1 << timeLineBits))
// 序列号最大数
sequenceMax = (-1 ^ (-1 << sequenceBits))
// 时间线需要偏移的位数
timeLineShift = sequenceBits
// 机器ID需要偏移的位数
workerIDShift = timeLineShift + timeLineBits
// 数据中心需要偏移的位数
timestampShift = workerIDShift + workerIDShift
)
// CreateNextUniqueID
func (sn *Snowflake)CreateNextUniqueID()(SnowFlakeID int64,err error) {
golang实现雪花算法
最新推荐文章于 2024-05-10 21:22:13 发布