@@ -10,17 +10,17 @@ import (
)
// 用于记录当前冰雹ID组成内容的数据结构
type _ HailAlgorithm struct {
type HailAlgorithm struct {
hostSerial int64
lastTimestamp int64
lastSequence int64
lock sync . Mutex
}
var hailAlgorithmInstance * _ HailAlgorithm
var hailAlgorithmInstance * HailAlgorithm
// 获取当前已经完成初始化的冰雹ID生成算法实例, 如果尚未完成初始化则会返回未初始化的错误。
func Get ( ) ( * _ HailAlgorithm, error ) {
func Get ( ) ( * HailAlgorithm , error ) {
if hailAlgorithmInstance == nil {
return nil , & HailAlgorithmNotInitializedError { }
}
@@ -29,7 +29,7 @@ func Get() (*_HailAlgorithm, error) {
// 指定一个主机编号, 并完成冰雹ID生成算法的初始化。
func Initialize ( hostSerial int64 ) {
hailAlgorithmInstance = & _ HailAlgorithm{
hailAlgorithmInstance = & HailAlgorithm {
hostSerial : hostSerial ,
lastTimestamp : types . Timestamp ( ) ,
lastSequence : 0 ,
@@ -38,7 +38,7 @@ func Initialize(hostSerial int64) {
}
// 返回一个可用的时间戳,如果主机发生了时间回拨,那么将等待一秒钟。
func ( h * _ HailAlgorithm) timestamp ( ) int64 {
func ( h * HailAlgorithm ) timestamp ( ) int64 {
for {
timestamp := types . Timestamp ( )
if timestamp == h . lastTimestamp {
@@ -54,7 +54,7 @@ func (h *_HailAlgorithm) timestamp() int64 {
}
// 生成一个冰雹ID。
func ( h * _ HailAlgorithm) Generate ( ) int64 {
func ( h * HailAlgorithm ) Generate ( ) int64 {
h . lock . Lock ( )
defer h . lock . Unlock ( )
timestamp := h . timestamp ( )
@@ -63,11 +63,11 @@ func (h *_HailAlgorithm) Generate() int64 {
}
// 生成一个冰雹ID, 并将其转换为字符串。
func ( h * _ HailAlgorithm) GenerateString ( ) string {
func ( h * HailAlgorithm ) GenerateString ( ) string {
return fmt . Sprintf ( "%017d" , h . Generate ( ) )
}
// 生成一个冰雹ID, 将其转换为字符串并附加指定的前缀
func ( h * _ HailAlgorithm) GeneratePrefixedString ( prefix string ) string {
func ( h * HailAlgorithm ) GeneratePrefixedString ( prefix string ) string {
return fmt . Sprintf ( "%s%s" , prefix , h . GenerateString ( ) )
}