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  }