package snowflake import ( "fmt" ) type SnowWorker struct { *SnowWorkerOffset } func NewSnowWorker(options *Options) *SnowWorker { options.Method = 2 return &SnowWorker{ NewSnowWorkerOffset(options), } } func (s *SnowWorker) NextID() int64 { s.Lock() defer s.Unlock() currentTimeTick := s.currentTimeTick() if s.lastTimeTick == currentTimeTick { s.currentSeqNumber++ if s.currentSeqNumber > s.maxSeqNumber { s.currentSeqNumber = s.minSeqNumber currentTimeTick = s.nextTimeTick() } } else { s.currentSeqNumber = s.minSeqNumber } if currentTimeTick < s.lastTimeTick { fmt.Printf("Time error for %d milliseconds", s.lastTimeTick-currentTimeTick) } s.lastTimeTick = currentTimeTick id := currentTimeTick<