golang 实现全局唯一订单ID

1,226 阅读1分钟

本人开发了一个全局唯一订单id生成器

package main

import (
   "fmt"
   "github.com/codewangz/goutils/idworker"
)

func main() {
   idx := idworker.NewIdworker(100) //表示队列长度,默认生成100个,避免生成过多的id
   fmt.Println(idx.GetId())
}

输出结果 2413932347658692

实现思路

  1. 使用chan类型带缓冲,做队列使用,预先生成ID,放到队列中
  2. time 纳秒级时间戳,确保ID的唯一性,采用纳秒时间戳加偏移量生成id,毫秒级生成ID,这也是其他语言不具有特性。

git地址 github.com/codewangz/goutils/idworker

欢迎大家使用和建议,我会根据建议升级包