package id import ( "log" "math/rand" "strconv" "time" "github.com/sony/sonyflake" ) var sf *sonyflake.Sonyflake const max = 1<<16 - 1 func init() { // 有一定的几率会产生相同的machineID // 比如两个引用这个包的实例,在同一个微秒被创建... rand.Seed(time.Now().UnixMicro()) st := sonyflake.Settings{ StartTime: time.Date(2022, 1, 1, 0, 0, 0, 0, time.UTC), MachineID: func() (uint16, error) { return uint16(rand.Intn(max)), nil }, CheckMachineID: nil, } sf = sonyflake.NewSonyflake(st) if sf == nil { log.Panicf("sonyflake init fails") } } func Str() string { ui64id, _ := sf.NextID() return strconv.FormatUint(ui64id, 10) } func UInt64() uint64 { ui64id, _ := sf.NextID() return ui64id }