123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- package utils
- import (
- "time"
- )
- var (
- sn int64 // 序列号占 12 位,十进制范围是 [ 0, 4095 ]
- lastTimeStamp int64 // 上次的时间戳(毫秒级), 1秒=1000毫秒, 1毫秒=1000微秒,1微秒=1000纳秒
- )
- func init() {
- lastTimeStamp = time.Now().UnixNano() / 1000000
- }
- // GetSnowflakeId
- // @函数名:GetSnowflakeId
- // @函数功能描述: 通过appid获取雪花id Apppid范围在 1~1023
- // @参数定义:appId
- // @返回值:int64
- //
- func GetSnowflakeId(appId int64) int64 {
- if appId == 0 {
- return 0
- }
- nowTime := time.Now().UnixNano() / 1000000
- appId = appId & 0x3FF
- sfOne := nowTime << 22
- sfTwo := appId << 12
- //每次累加,减小时间回滚发生重复的概率
- sn++
- sfThree := sn & 0xFFF
- return sfOne | sfTwo | sfThree
- }
- // GetAppIdBySnowflakeId
- // @函数名:GetAppIdBySnowflakeId
- // @函数功能描述: 通过雪花id,返回appid
- // @参数定义:snowflakeId
- // @返回值:int64
- //
- func GetAppIdBySnowflakeId(snowflakeId int64) int64 {
- if snowflakeId == 0 {
- return 0
- }
- appId := snowflakeId & 0x3FF000
- return appId >> 12
- }
|