service/utility.go

62 lines
1.1 KiB
Go
Raw Permalink Normal View History

package service
import (
"apigo.cc/go/id"
"apigo.cc/go/log"
"apigo.cc/go/redis"
"sync"
)
var (
idMaker IDMakerInterface
idMakerLock sync.Mutex
)
// IDMakerInterface ID 生成器接口
type IDMakerInterface interface {
Get(size int) string
GetForMysql(size int) string
GetForPostgreSQL(size int) string
}
func getIDMaker() IDMakerInterface {
if idMaker != nil {
return idMaker
}
idMakerLock.Lock()
defer idMakerLock.Unlock()
if idMaker != nil {
return idMaker
}
if Config.IdServer != "" {
rd := redis.GetRedis(Config.IdServer, log.DefaultLogger)
if rd.Error == nil {
idMaker = redis.NewIDMaker(rd)
}
}
if idMaker == nil {
idMaker = id.DefaultIDMaker
}
return idMaker
}
// MakeId 生成指定长度的 ID
func MakeId(size int) string {
return getIDMaker().Get(size)
}
// MakeIdForMysql 生成适用于 MySQL 的有序 ID
func MakeIdForMysql(size int) string {
return getIDMaker().GetForMysql(size)
}
// MakeIdForPostgreSQL 生成适用于 PostgreSQL 的有序 ID
func MakeIdForPostgreSQL(size int) string {
return getIDMaker().GetForPostgreSQL(size)
}