common.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package utils
  2. import "strings"
  3. func Map[T any, R any](slice []T, mapper func(T) R) []R {
  4. result := make([]R, len(slice))
  5. for i, item := range slice {
  6. result[i] = mapper(item)
  7. }
  8. return result
  9. }
  10. func ConvertInterface[T any](data interface{}) T {
  11. var zero T
  12. // 检查 nil
  13. if data == nil {
  14. println("数据为空")
  15. return zero
  16. }
  17. // 类型断言
  18. if result, ok := data.(T); ok {
  19. // println("断言成功")
  20. return result
  21. }
  22. return zero
  23. }
  24. // 通用的Filter函数
  25. func Filter[T any](slice []T, predicate func(T) bool) []T {
  26. var result []T
  27. for _, v := range slice {
  28. if predicate(v) {
  29. result = append(result, v)
  30. }
  31. }
  32. return result
  33. }
  34. func SliceSubtract[T comparable](slice1, slice2 []T) []T {
  35. exclude := make(map[T]bool)
  36. for _, v := range slice2 {
  37. exclude[v] = true
  38. }
  39. var result []T
  40. for _, v := range slice1 {
  41. if !exclude[v] {
  42. result = append(result, v)
  43. }
  44. }
  45. return result
  46. }
  47. func IsEmpty(value *string) bool {
  48. if value == nil {
  49. return true
  50. }
  51. if *value == "" {
  52. return true
  53. }
  54. if len(*value) == 0 {
  55. return true
  56. }
  57. if len(strings.TrimSpace(*value)) == 0 {
  58. return true
  59. }
  60. return false
  61. }
  62. func IsNotEmpty(value *string) bool {
  63. return !IsEmpty(value)
  64. }