libString.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package lib
  2. import (
  3. "crypto/md5"
  4. "encoding/hex"
  5. "github.com/shopspring/decimal"
  6. "math/rand"
  7. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. // #取得随机字符串:通过打乱slice来操作
  12. func GetRandstring(length int, char string, rand_x int64) string {
  13. if length < 1 {
  14. return ""
  15. }
  16. if len(char) <= 6 || len(char) <= length {
  17. char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  18. }
  19. charArr := strings.Split(char, "")
  20. ran := rand.New(rand.NewSource(time.Now().UnixMilli() + rand_x))
  21. l := len(charArr)
  22. for i := l - 1; i > 0; i-- {
  23. r := ran.Intn(i)
  24. charArr[r], charArr[i] = charArr[i], charArr[r]
  25. }
  26. rchar := charArr[:length]
  27. return strings.Join(rchar, "")
  28. }
  29. // 返回一个32位md5加密后的字符串
  30. func Md5(str string) string {
  31. h := md5.New()
  32. h.Write([]byte(str))
  33. return hex.EncodeToString(h.Sum(nil))
  34. }
  35. // 转化
  36. func TimeStrToTime(T_time string) (time.Time, bool) {
  37. stamp, err := time.ParseInLocation("2006-01-02 15:04:05", T_time, time.Local) // +8
  38. if err != nil {
  39. return time.Time{}, false
  40. }
  41. return stamp, true
  42. }
  43. func DateStrToTime(T_date string) (time.Time, bool) {
  44. stamp, err := time.ParseInLocation("2006-01-02", T_date, time.Local) // +8
  45. if err != nil {
  46. return time.Time{}, false
  47. }
  48. return stamp, true
  49. }
  50. func NowDate() time.Time {
  51. now := time.Now()
  52. nowDate := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local)
  53. return nowDate
  54. }
  55. func MonthStrToTime(T_month string) (time.Time, bool) {
  56. stamp, err := time.ParseInLocation("2006-01", T_month, time.Local) // +8
  57. if err != nil {
  58. return time.Time{}, false
  59. }
  60. return stamp, true
  61. }
  62. func SplitStringIds(str string, prefix string) (r []string) {
  63. if len(str) == 0 {
  64. return r
  65. }
  66. Ids_str := strings.TrimRight(str, "|")
  67. Ids := strings.Split(Ids_str, "|")
  68. for _, v := range Ids {
  69. r = append(r, strings.TrimLeft(v, prefix))
  70. }
  71. return r
  72. }
  73. func SplitStringToDotStr(str string, prefix string) (r string) {
  74. if len(str) == 0 {
  75. return r
  76. }
  77. Ids_str := strings.TrimRight(str, "|")
  78. Ids := strings.Split(Ids_str, "|")
  79. for _, v := range Ids {
  80. r += strings.TrimLeft(v, prefix) + ","
  81. }
  82. r = strings.TrimRight(r, ",")
  83. return r
  84. }
  85. func SplitStringToIntIds(str string, prefix string) (r []int) {
  86. if len(str) == 0 {
  87. return r
  88. }
  89. Ids_str := strings.TrimRight(str, "|")
  90. Ids := strings.Split(Ids_str, "|")
  91. for _, v := range Ids {
  92. id, _ := strconv.Atoi(strings.TrimLeft(v, prefix))
  93. r = append(r, id)
  94. }
  95. return r
  96. }
  97. func IntIdsDistinct(Ids []int) (result []int) {
  98. distinctMap := make(map[int]int, len(Ids))
  99. for _, Id := range Ids {
  100. if _, ok := distinctMap[Id]; !ok {
  101. distinctMap[Id] = 1
  102. result = append(result, Id)
  103. }
  104. }
  105. return result
  106. }
  107. func SplitString(str string, cutset string) (r []string) {
  108. if len(str) == 0 {
  109. return r
  110. }
  111. list := strings.Split(strings.TrimRight(str, cutset), cutset)
  112. return list
  113. }
  114. // string转float64保留2位小数
  115. func StringToFloat64TwoDecimal(str string) float64 {
  116. temp, _ := strconv.ParseFloat(str, 64)
  117. f, _ := decimal.NewFromFloat(temp).Round(2).Float64()
  118. return f
  119. }