43 lines
885 B
Go
43 lines
885 B
Go
package utils
|
||
|
||
import (
|
||
"errors"
|
||
"time"
|
||
|
||
sf "github.com/bwmarrin/snowflake"
|
||
)
|
||
|
||
const (
|
||
_dafaultStartTime = "2023-12-31" // 默认开始时间
|
||
)
|
||
|
||
var node *sf.Node
|
||
|
||
// Init 雪花算法组件初始化,正常应该把雪花算法当成一个独立的服务部署
|
||
// startTime 开始时间
|
||
// machineID 机器id
|
||
func Init(startTime string, machineID int64) (err error) {
|
||
if machineID < 0 {
|
||
return errors.New("snowflake need machineID")
|
||
}
|
||
if len(startTime) == 0 {
|
||
startTime = _dafaultStartTime
|
||
}
|
||
var st time.Time
|
||
st, err = time.Parse("2006-01-02", startTime)
|
||
if err != nil {
|
||
return
|
||
}
|
||
sf.Epoch = st.UnixNano() / 1000000 // 时间戳的开始时间,默认从1970年开始计算
|
||
node, err = sf.NewNode(machineID) // 机器编号,最多1024
|
||
return
|
||
}
|
||
|
||
func GenID() int64 {
|
||
return node.Generate().Int64()
|
||
}
|
||
|
||
func GenIDStr() string {
|
||
return node.Generate().String()
|
||
}
|