12345678910111213141516171819202122232425262728293031323334 |
- 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
- }
|