str.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package common
  2. import (
  3. "encoding/json"
  4. "math/rand"
  5. "strconv"
  6. "unsafe"
  7. )
  8. func GetStringIfEmpty(str string, defaultValue string) string {
  9. if str == "" {
  10. return defaultValue
  11. }
  12. return str
  13. }
  14. func GetRandomString(length int) string {
  15. //rand.Seed(time.Now().UnixNano())
  16. key := make([]byte, length)
  17. for i := 0; i < length; i++ {
  18. key[i] = keyChars[rand.Intn(len(keyChars))]
  19. }
  20. return string(key)
  21. }
  22. func MapToJsonStr(m map[string]interface{}) string {
  23. bytes, err := json.Marshal(m)
  24. if err != nil {
  25. return ""
  26. }
  27. return string(bytes)
  28. }
  29. func StrToMap(str string) (map[string]interface{}, error) {
  30. m := make(map[string]interface{})
  31. err := Unmarshal([]byte(str), &m)
  32. if err != nil {
  33. return nil, err
  34. }
  35. return m, nil
  36. }
  37. func StrToJsonArray(str string) ([]interface{}, error) {
  38. var js []interface{}
  39. err := json.Unmarshal([]byte(str), &js)
  40. if err != nil {
  41. return nil, err
  42. }
  43. return js, nil
  44. }
  45. func IsJsonArray(str string) bool {
  46. var js []interface{}
  47. return json.Unmarshal([]byte(str), &js) == nil
  48. }
  49. func IsJsonObject(str string) bool {
  50. var js map[string]interface{}
  51. return json.Unmarshal([]byte(str), &js) == nil
  52. }
  53. func String2Int(str string) int {
  54. num, err := strconv.Atoi(str)
  55. if err != nil {
  56. return 0
  57. }
  58. return num
  59. }
  60. func StringsContains(strs []string, str string) bool {
  61. for _, s := range strs {
  62. if s == str {
  63. return true
  64. }
  65. }
  66. return false
  67. }
  68. // StringToByteSlice []byte only read, panic on append
  69. func StringToByteSlice(s string) []byte {
  70. tmp1 := (*[2]uintptr)(unsafe.Pointer(&s))
  71. tmp2 := [3]uintptr{tmp1[0], tmp1[1], tmp1[1]}
  72. return *(*[]byte)(unsafe.Pointer(&tmp2))
  73. }