35 lines
737 B
Go
35 lines
737 B
Go
|
package utils
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"fmt"
|
||
|
"reflect"
|
||
|
)
|
||
|
|
||
|
func Filter[T comparable](tSlice []T, filter func(t T) bool) []T {
|
||
|
result := make([]T, 0)
|
||
|
for _, t := range tSlice {
|
||
|
if filter(t) {
|
||
|
result = append(result, t)
|
||
|
}
|
||
|
}
|
||
|
return result
|
||
|
}
|
||
|
|
||
|
func ToStringSlice(value any) ([]string, error) {
|
||
|
strArr := make([]string, 0)
|
||
|
switch reflect.TypeOf(value).Kind() {
|
||
|
case reflect.Slice, reflect.Array:
|
||
|
origin := reflect.ValueOf(value)
|
||
|
for i := 0; i < origin.Len(); i++ {
|
||
|
item := fmt.Sprintf("%v", origin.Index(i))
|
||
|
strArr = append(strArr, item)
|
||
|
}
|
||
|
case reflect.String:
|
||
|
strArr = append(strArr, fmt.Sprintf("%v", value))
|
||
|
default:
|
||
|
return nil, errors.New("value format error, must be string or array")
|
||
|
}
|
||
|
return strArr, nil
|
||
|
}
|