util.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package utils
  2. import (
  3. "fmt"
  4. "math/rand"
  5. "sync/atomic"
  6. "time"
  7. )
  8. var (
  9. // 每秒时间缓存
  10. timeNowSec = &atomic.Value{}
  11. )
  12. func init() {
  13. rand.Seed(time.Now().UnixNano())
  14. timeNowSec.Store(time.Now())
  15. go func() {
  16. tick := time.NewTicker(time.Second * 1)
  17. for c := range tick.C {
  18. timeNowSec.Store(c)
  19. }
  20. }()
  21. }
  22. func NowSec() time.Time {
  23. t := timeNowSec.Load()
  24. return t.(time.Time)
  25. }
  26. func InArrStr(arr []string, str string) bool {
  27. for _, d := range arr {
  28. if d == str {
  29. return true
  30. }
  31. }
  32. return false
  33. }
  34. const (
  35. KB = 1024
  36. MB = 1024 * KB
  37. GB = 1024 * MB
  38. TB = 1024 * GB
  39. PB = 1024 * TB
  40. )
  41. func HumanByte(bf interface{}) string {
  42. var hb string
  43. var bAll float64
  44. switch bi := bf.(type) {
  45. case int:
  46. bAll = float64(bi)
  47. case int32:
  48. bAll = float64(bi)
  49. case uint32:
  50. bAll = float64(bi)
  51. case int64:
  52. bAll = float64(bi)
  53. case uint64:
  54. bAll = float64(bi)
  55. case float64:
  56. bAll = float64(bi)
  57. }
  58. switch {
  59. case bAll >= TB:
  60. hb = fmt.Sprintf("%0.2f TB", bAll/TB)
  61. case bAll >= GB:
  62. hb = fmt.Sprintf("%0.2f GB", bAll/GB)
  63. case bAll >= MB:
  64. hb = fmt.Sprintf("%0.2f MB", bAll/MB)
  65. case bAll >= KB:
  66. hb = fmt.Sprintf("%0.2f KB", bAll/KB)
  67. default:
  68. hb = fmt.Sprintf("%0.2f B", bAll)
  69. }
  70. return hb
  71. }
  72. func RandomRunes(length int) string {
  73. letterRunes := []rune("abcdefghijklmnpqrstuvwxy1234567890")
  74. bytes := make([]rune, length)
  75. for i := range bytes {
  76. bytes[i] = letterRunes[rand.Intn(len(letterRunes))]
  77. }
  78. return string(bytes)
  79. }