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 }