wp-go/helper/func.go

61 lines
966 B
Go
Raw Permalink Normal View History

2022-08-28 13:27:41 +00:00
package helper
2022-09-08 02:54:37 +00:00
import (
2023-02-15 16:32:02 +00:00
"net/url"
2022-09-08 02:54:37 +00:00
"reflect"
2023-02-15 16:32:02 +00:00
"strings"
2022-09-08 02:54:37 +00:00
)
func ToAny[T any](v T) any {
return v
}
2023-02-05 12:33:33 +00:00
func Or[T any](is bool, left, right T) T {
if is {
return left
}
return right
}
2023-01-21 11:31:23 +00:00
func StructColumnToSlice[T any, M any](arr []M, field string) (r []T) {
2022-09-08 02:54:37 +00:00
for i := 0; i < len(arr); i++ {
v := reflect.ValueOf(arr[i]).FieldByName(field).Interface()
if val, ok := v.(T); ok {
r = append(r, val)
}
}
return
}
2023-02-15 16:32:02 +00:00
func UrlScheme(u string, isHttps bool) string {
return Or(isHttps,
strings.Replace(u, "http://", "https://", 1),
strings.Replace(u, "https://", "http://", 1),
)
}
func CutUrlHost(u string) string {
ur, err := url.Parse(u)
if err != nil {
return u
}
ur.Scheme = ""
ur.Host = ""
return ur.String()
}
func Defaults[T comparable](v, defaults T) T {
var zero T
if v == zero {
return defaults
}
return v
}
func DefaultVal[T any](v, defaults T) T {
var zero T
if reflect.DeepEqual(zero, v) {
return defaults
}
return v
}