|
12345678910111213141516171819202122232425262728293031323334353637 |
- package client
-
- import (
- "strconv"
- "sync/atomic"
- "time"
- )
-
- var (
- IdGen IdGenerator
- )
-
- func init() {
- IdGen = NewAutoIncId()
- }
-
- type IdGenerator interface {
- Id() string
- }
-
- // AutoIncId
- type autoincId struct {
- value int64
- }
-
- func (ai *autoincId) Id() string {
- next := atomic.AddInt64(&ai.value, 1)
- return strconv.FormatInt(next, 10)
- }
-
- func NewAutoIncId() IdGenerator {
- // we'll consider the nano fraction of a second at startup unique
- // and count up from there.
- return &autoincId{
- value: int64(time.Now().Nanosecond()) << 32,
- }
- }
|