fmt_plus.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package utils
  2. import (
  3. "fmt"
  4. "math/rand"
  5. "reflect"
  6. "strings"
  7. )
  8. //@description: 利用反射将结构体转化为map
  9. func StructToMap(obj interface{}) map[string]interface{} {
  10. obj1 := reflect.TypeOf(obj)
  11. obj2 := reflect.ValueOf(obj)
  12. data := make(map[string]interface{})
  13. for i := 0; i < obj1.NumField(); i++ {
  14. if obj1.Field(i).Tag.Get("mapstructure") != "" {
  15. data[obj1.Field(i).Tag.Get("mapstructure")] = obj2.Field(i).Interface()
  16. } else {
  17. data[obj1.Field(i).Name] = obj2.Field(i).Interface()
  18. }
  19. }
  20. return data
  21. }
  22. //@description: 将数组格式化为字符串
  23. func ArrayToString(array []interface{}) string {
  24. return strings.Replace(strings.Trim(fmt.Sprint(array), "[]"), " ", ",", -1)
  25. }
  26. func Pointer[T any](in T) (out *T) {
  27. return &in
  28. }
  29. func FirstUpper(s string) string {
  30. if s == "" {
  31. return ""
  32. }
  33. return strings.ToUpper(s[:1]) + s[1:]
  34. }
  35. func FirstLower(s string) string {
  36. if s == "" {
  37. return ""
  38. }
  39. return strings.ToLower(s[:1]) + s[1:]
  40. }
  41. // MaheHump 将字符串转换为驼峰命名
  42. func MaheHump(s string) string {
  43. words := strings.Split(s, "-")
  44. for i := 1; i < len(words); i++ {
  45. words[i] = strings.Title(words[i])
  46. }
  47. return strings.Join(words, "")
  48. }
  49. // RandomString 随机字符串
  50. func RandomString(n int) string {
  51. var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
  52. b := make([]rune, n)
  53. for i := range b {
  54. b[i] = letters[RandomInt(0, len(letters))]
  55. }
  56. return string(b)
  57. }
  58. func RandomInt(min, max int) int {
  59. return min + rand.Intn(max-min)
  60. }
  61. // BuildTree 用于构建一个树形结构
  62. func BuildTree[T TreeNode[T]](nodes []T) []T {
  63. nodeMap := make(map[int]T)
  64. // 创建一个基本map
  65. for i := range nodes {
  66. nodeMap[nodes[i].GetID()] = nodes[i]
  67. }
  68. for i := range nodes {
  69. if nodes[i].GetParentID() != 0 {
  70. parent := nodeMap[nodes[i].GetParentID()]
  71. parent.SetChildren(nodes[i])
  72. }
  73. }
  74. var rootNodes []T
  75. for i := range nodeMap {
  76. if nodeMap[i].GetParentID() == 0 {
  77. rootNodes = append(rootNodes, nodeMap[i])
  78. }
  79. }
  80. return rootNodes
  81. }
  82. type TreeNode[T any] interface {
  83. GetChildren() []T
  84. SetChildren(children T)
  85. GetID() int
  86. GetParentID() int
  87. }