2
0

fmt_plus.go 2.3 KB

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