slice.go 737 B

12345678910111213141516171819202122232425262728293031323334
  1. package utils
  2. import (
  3. "errors"
  4. "fmt"
  5. "reflect"
  6. )
  7. func Filter[T comparable](tSlice []T, filter func(t T) bool) []T {
  8. result := make([]T, 0)
  9. for _, t := range tSlice {
  10. if filter(t) {
  11. result = append(result, t)
  12. }
  13. }
  14. return result
  15. }
  16. func ToStringSlice(value any) ([]string, error) {
  17. strArr := make([]string, 0)
  18. switch reflect.TypeOf(value).Kind() {
  19. case reflect.Slice, reflect.Array:
  20. origin := reflect.ValueOf(value)
  21. for i := 0; i < origin.Len(); i++ {
  22. item := fmt.Sprintf("%v", origin.Index(i))
  23. strArr = append(strArr, item)
  24. }
  25. case reflect.String:
  26. strArr = append(strArr, fmt.Sprintf("%v", value))
  27. default:
  28. return nil, errors.New("value format error, must be string or array")
  29. }
  30. return strArr, nil
  31. }