1
0
mirror of synced 2026-04-18 14:28:43 +08:00
This commit is contained in:
zhouzj
2021-03-20 14:22:35 +08:00
parent dd8e0a1a43
commit 1f5cc01168
3 changed files with 42 additions and 38 deletions

View File

@@ -5,6 +5,10 @@
1.go 1.16
2. <20><><EFBFBD><EFBFBD>Go-Modules
```
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct
```
## Go<47><6F><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>

View File

@@ -34,46 +34,46 @@ type SnowWorkerM1 struct {
}
func NewSnowWorkerM1(options *contract.IdGeneratorOptions) contract.ISnowWorker {
var WorkerIdBitLength byte
var SeqBitLength byte
var MaxSeqNumber uint32
var workerIdBitLength byte
var seqBitLength byte
var maxSeqNumber uint32
var WorkerId = options.WorkerId
var workerId = options.WorkerId
if options.WorkerIdBitLength == 0 {
WorkerIdBitLength = 6
workerIdBitLength = 6
} else {
WorkerIdBitLength = options.WorkerIdBitLength
workerIdBitLength = options.WorkerIdBitLength
}
if options.SeqBitLength == 0 {
SeqBitLength = 6
seqBitLength = 6
} else {
SeqBitLength = options.SeqBitLength
seqBitLength = options.SeqBitLength
}
if options.MaxSeqNumber > 0 {
MaxSeqNumber = options.MaxSeqNumber
maxSeqNumber = options.MaxSeqNumber
} else {
MaxSeqNumber = uint32(math.Pow(2, float64(options.SeqBitLength))) - 1
maxSeqNumber = uint32(math.Pow(2, float64(options.SeqBitLength))) - 1
}
var MinSeqNumber = options.MinSeqNumber
var TopOverCostCount = options.TopOverCostCount
var minSeqNumber = options.MinSeqNumber
var topOverCostCount = options.TopOverCostCount
var BaseTime int64
var baseTime int64
if options.BaseTime != 0 {
BaseTime = options.BaseTime
baseTime = options.BaseTime
} else {
BaseTime = 1582136402000
baseTime = 1582136402000
}
timestampShift := (byte)(options.WorkerIdBitLength + options.SeqBitLength)
currentSeqNumber := options.MinSeqNumber
return &SnowWorkerM1{
BaseTime: BaseTime,
WorkerId: WorkerId,
WorkerIdBitLength: WorkerIdBitLength,
SeqBitLength: SeqBitLength,
MaxSeqNumber: MaxSeqNumber,
MinSeqNumber: MinSeqNumber,
TopOverCostCount: TopOverCostCount,
BaseTime: baseTime,
WorkerId: workerId,
WorkerIdBitLength: workerIdBitLength,
SeqBitLength: seqBitLength,
MaxSeqNumber: maxSeqNumber,
MinSeqNumber: minSeqNumber,
TopOverCostCount: topOverCostCount,
_TimestampShift: timestampShift,
_CurrentSeqNumber: currentSeqNumber}
}

View File

@@ -19,54 +19,54 @@ type DefaultIdGenerator struct {
IdGeneratorException contract.IdGeneratorException
}
func NewDefaultIdGenerator(Options *contract.IdGeneratorOptions) *DefaultIdGenerator {
if Options == nil {
func NewDefaultIdGenerator(options *contract.IdGeneratorOptions) *DefaultIdGenerator {
if options == nil {
panic("dig.Options error.")
}
var minTime = time.Now().AddDate(-50, 0, 0).UnixNano() / 1e6
if minTime == 0 || Options.BaseTime < minTime || Options.BaseTime > time.Now().UnixNano()/1e6 {
if minTime == 0 || options.BaseTime < minTime || options.BaseTime > time.Now().UnixNano()/1e6 {
panic("BaseTime error.")
}
if Options.SeqBitLength+Options.WorkerIdBitLength > 22 {
if options.SeqBitLength+options.WorkerIdBitLength > 22 {
panic("errorWorkerIdBitLength + SeqBitLength <= 22")
}
maxWorkerIdNumber := uint16(math.Pow(float64(2), float64(Options.WorkerIdBitLength))) - 1
if Options.WorkerId > maxWorkerIdNumber {
maxWorkerIdNumber := uint16(math.Pow(float64(2), float64(options.WorkerIdBitLength))) - 1
if options.WorkerId > maxWorkerIdNumber {
panic("WorkerId error. (range:[1, "+ string(maxWorkerIdNumber)+ "]")
}
if Options.SeqBitLength < 2 || Options.SeqBitLength > 21 {
if options.SeqBitLength < 2 || options.SeqBitLength > 21 {
panic("SeqBitLength error. (range:[2, 21])")
}
maxSeqNumber := uint32(math.Pow(2, float64(Options.SeqBitLength))) - 1
if Options.MaxSeqNumber > maxSeqNumber {
maxSeqNumber := uint32(math.Pow(2, float64(options.SeqBitLength))) - 1
if options.MaxSeqNumber > maxSeqNumber {
panic("MaxSeqNumber error. (range:[1, "+ string(maxSeqNumber)+ "]")
}
if Options.MinSeqNumber > maxSeqNumber {
if options.MinSeqNumber > maxSeqNumber {
panic("MinSeqNumber error. (range:[1, "+ string(maxSeqNumber)+ "]")
}
var snowWorker contract.ISnowWorker
switch Options.Method {
switch options.Method {
case 1:
snowWorker = core.NewSnowWorkerM1(Options)
snowWorker = core.NewSnowWorkerM1(options)
case 2:
snowWorker = core.NewSnowWorkerM2(Options)
snowWorker = core.NewSnowWorkerM2(options)
default:
snowWorker = core.NewSnowWorkerM1(Options)
snowWorker = core.NewSnowWorkerM1(options)
}
if Options.Method == 1 {
if options.Method == 1 {
time.Sleep(time.Duration(500) * time.Microsecond)
}
return &DefaultIdGenerator{
Options: Options,
Options: options,
SnowWorker: snowWorker,
}
}