@@ -5,6 +5,10 @@ | |||
1.go 1.16 | |||
2. 启用Go-Modules | |||
``` | |||
go env -w GO111MODULE=on | |||
go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct | |||
``` | |||
## Go代码示例 | |||
@@ -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} | |||
} | |||
@@ -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("error:WorkerIdBitLength + 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, | |||
} | |||
} | |||