github.com/SupenBysz/gf-admin-community@v0.7.4/utility/idgen/idgen.go (about) 1 package idgen 2 3 import ( 4 "context" 5 "github.com/gogf/gf/v2/frame/g" 6 "github.com/yitter/idgenerator-go/idgen" 7 ) 8 9 // InitIdGenerator 初始化ID生成器 10 func InitIdGenerator() { 11 serviceWorkerId := g.Cfg().MustGet(context.Background(), "service.idGeneratorWorkerId").Uint16() 12 if serviceWorkerId < 1 || serviceWorkerId > 63 { 13 g.Log().Fatal(context.Background(), "service.serviceWorkerId 取值范围只能是 1 ~ 63") 14 return 15 } 16 17 // 创建 IdGeneratorOptions 对象,请在构造函数中输入 WorkerId: 18 var options = idgen.NewIdGeneratorOptions(serviceWorkerId) 19 options.WorkerIdBitLength = 10 // WorkerIdBitLength 默认值6,支持的 WorkerId 最大值为2^6-1,若 WorkerId 超过64,可设置更大的 WorkerIdBitLength 20 // ...... 其它参数设置参考 IdGeneratorOptions 定义,一般来说,只要再设置 WorkerIdBitLength (决定 WorkerId 的最大值)。 21 // 保存参数(必须的操作,否则以上设置都不能生效): 22 idgen.SetIdGenerator(options) 23 } 24 25 var isInit = false 26 27 // NextId 构建新ID 28 func NextId() int64 { 29 if isInit == false { 30 isInit = true 31 InitIdGenerator() 32 } 33 34 return idgen.NextId() 35 }