snowflake.go 902 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package utils
  2. import (
  3. "time"
  4. )
  5. func init() {
  6. lastTimeStamp = time.Now().UnixNano() / 1000000
  7. }
  8. // GetSnowflakeId
  9. // @函数名:GetSnowflakeId
  10. // @函数功能描述: 通过appid获取雪花id Apppid范围在 1~1023
  11. // @参数定义:appId
  12. // @返回值:int64
  13. //
  14. func GetSnowflakeId(appId int64) int64 {
  15. if appId == 0 {
  16. return 0
  17. }
  18. nowTime := time.Now().UnixNano() / 1000000
  19. appId = appId & 0x3FF
  20. sfOne := nowTime << 22
  21. sfTwo := appId << 12
  22. //每次累加,减小时间回滚发生重复的概率
  23. sn++
  24. sfThree := sn & 0xFFF
  25. return sfOne | sfTwo | sfThree
  26. }
  27. // GetAppIdBySnowflakeId
  28. // @函数名:GetAppIdBySnowflakeId
  29. // @函数功能描述: 通过雪花id,返回appid
  30. // @参数定义:snowflakeId
  31. // @返回值:int64
  32. //
  33. func GetAppIdBySnowflakeId(snowflakeId int64) int64 {
  34. if snowflakeId == 0 {
  35. return 0
  36. }
  37. appId := snowflakeId & 0x3FF000
  38. return appId >> 12
  39. }