general.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // 通用工具
  2. // 秒寻科技
  3. // zt 2024-01-04
  4. package util
  5. import (
  6. "bytes"
  7. "fmt"
  8. "io"
  9. "math/rand"
  10. "strings"
  11. "github.com/google/uuid"
  12. "golang.org/x/text/encoding/simplifiedchinese"
  13. "golang.org/x/text/transform"
  14. )
  15. // 默认字符串表
  16. const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%&*?"
  17. // 项目编号字符串
  18. const projectIdCharset = "0123456789ABCDEF"
  19. // 生成 uuid
  20. func GenerateUuid() string {
  21. uuid := uuid.New().String()
  22. return uuid
  23. }
  24. // 生成随机字符串
  25. func GenRandomString(strLen int) string {
  26. sb := strings.Builder{}
  27. sb.Grow(strLen)
  28. for i := 0; i < strLen; i++ {
  29. sb.WriteByte(charset[rand.Intn(len(charset))])
  30. }
  31. return sb.String()
  32. }
  33. // 生成随机项目编号
  34. // strLen:字符长度
  35. // 返回值:项目编号ID
  36. func GenRandomProjectID(strLen int) string {
  37. sb := strings.Builder{}
  38. sb.Grow(strLen)
  39. for i := 0; i < strLen; i++ {
  40. sb.WriteByte(projectIdCharset[rand.Intn(len(projectIdCharset))])
  41. }
  42. return sb.String()
  43. }
  44. // 去掉字符串中的空字符
  45. func RemoveNullChars(s string) string {
  46. // 创建一个切片来存储结果字符串的字节
  47. var result []byte
  48. // 遍历输入字符串的每个字节
  49. for i := 0; i < len(s); i++ {
  50. // 检查当前字节是否是 \u0000(即空字符)
  51. if s[i] != 0 {
  52. // 如果不是空字符,则将其添加到结果切片中
  53. result = append(result, s[i])
  54. }
  55. }
  56. // 将结果切片转换回字符串并返回
  57. return string(result)
  58. }
  59. // 字符转换,将GBK格式(2字节标识一个汉字)的字符转成utf8字符(4字节表示一个汉字)
  60. func CharTransGbToUtf8(gb2312Bytes []byte) ([]byte, error) {
  61. //创建一个 GB2312到 UTF-8 的转换器
  62. reader := transform.NewReader(bytes.NewReader(gb2312Bytes), simplifiedchinese.GB18030.NewDecoder())
  63. //读取转换后的 UTF-8 编码的字节切片
  64. utf8Bytes, err := io.ReadAll(reader)
  65. if err != nil {
  66. fmt.Println("Error converting encoding:", err)
  67. return nil, err
  68. }
  69. // 将 UTF-8 编码的字节切片转换为字符串并打印
  70. return utf8Bytes, nil
  71. }
  72. // 字符转换,将utf8格式(4字节表示一个汉字)转成GBK格式(2字节标识一个汉字)
  73. func CharTransUtf8ToGb(utf8Bytes []byte) ([]byte, error) {
  74. var buf bytes.Buffer
  75. // 创建一个GB18030编码器
  76. encoder := simplifiedchinese.GB18030.NewEncoder()
  77. //将utf8转成gb
  78. _, err := transform.NewWriter(&buf, encoder).Write(utf8Bytes)
  79. if err != nil {
  80. return nil, err
  81. }
  82. //返回gb编码
  83. return buf.Bytes(), nil
  84. }