utils.go 852 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package game
  2. import (
  3. "fmt"
  4. "runtime"
  5. "strconv"
  6. "strings"
  7. "sync"
  8. "github.com/gofrs/uuid"
  9. )
  10. //获取线程ID
  11. func GoID() int {
  12. var buf [64]byte
  13. n := runtime.Stack(buf[:], false)
  14. idField := strings.Fields(strings.TrimPrefix(string(buf[:n]), "goroutine "))[0]
  15. id, err := strconv.Atoi(idField)
  16. if err != nil {
  17. panic(fmt.Sprintf("cannot get goroutine id: %v", err))
  18. }
  19. return id
  20. }
  21. var uuidIntMap = make(map[string]int)
  22. var uuidIntMapLock sync.Mutex
  23. //获取int型的自增id(范围1~2111111111)
  24. func GetUuidInt(key string) int {
  25. uuidIntMapLock.Lock()
  26. defer uuidIntMapLock.Unlock()
  27. id := uuidIntMap[key] + 1
  28. if id > 2111111111 {
  29. id = 1
  30. }
  31. uuidIntMap[key] = id
  32. return id
  33. }
  34. func NewUUID() string {
  35. uidStr := ""
  36. uid, err := uuid.NewV1()
  37. if err == nil {
  38. uidStr = strings.ReplaceAll(uid.String(), "-", "")
  39. }
  40. return uidStr
  41. }