ZBLOG

golang 实现雪花生成且固定位数

package main

import (

"fmt"
"time"

)

func main() {

var epoch int64 = 1577836800000 // 2020-01-01 00:00:00
var machineID uint8 = 1

for i := 0; i < 10; i++ {
    now := time.Now().UnixNano() / 1000000
    id := (now-epoch)<<22 | int64(machineID)<<16 | int64(i)
    fmt.Printf("%d\n", id%(int64(10)^5))
}

}

// 输出结果: // 43926 // 43927 // 43928 // 43929 // 43930 // 43931 // 43932 // 43933 // 43934 // 43935

// 说明: // epoch:起始时间,这里设为 2020-01-01 00:00:00 的毫秒时间戳 // machineID:机器编号,这里设为固定值 1 // i:循环计数器,用来区分同一毫秒内生成的不同 ID // now:当前时间的毫秒时间戳 // id:雪花算法生成的 ID,其中 timestamp 占 42 位(从 epoch 开始计算),machineID 占 4 位,i 占 18 位 // id%(int64(10)^5):将 id 取模后,返回一个 5 位数的 ID,即固定位数

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=2428

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?