-
Notifications
You must be signed in to change notification settings - Fork 3
/
snoyflake.go
38 lines (32 loc) · 938 Bytes
/
snoyflake.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package idKit
import (
"github.com/richelieu-yang/chimera/v3/src/core/interfaceKit"
"github.com/sony/sonyflake"
"time"
)
var (
// Decompose returns a set of Sonyflake ID parts.
Decompose func(id uint64) map[string]uint64 = sonyflake.Decompose
)
// NewSonyFlake 雪花算法.
/*
PS:
(1) 可用作分布式唯一id(前提是合理配置好 MachineID);
(2) 通过 sonyflake.Sonyflake.NextID() 生成id(貌似是18位的).
golang实现的雪花算法 https://mp.weixin.qq.com/s/visG_GHtU67xCtsvvG1aPQ
@param settings 可以为nil(但不推荐这么干)
*/
func NewSonyFlake(settings *sonyflake.Settings) (*sonyflake.Sonyflake, error) {
if settings == nil {
settings = &sonyflake.Settings{
StartTime: time.Now(),
MachineID: nil,
CheckMachineID: nil,
}
}
sf := sonyflake.NewSonyflake(*settings)
if err := interfaceKit.AssertNotNil(sf, "sf"); err != nil {
return nil, err
}
return sf, nil
}