electricity_bill_calc_service/tools/utils.go

89 lines
2.5 KiB
Go

package tools
import (
"encoding/json"
"fmt"
"strings"
"github.com/mozillazg/go-pinyin"
"github.com/samber/lo"
)
func ContainsInsensitive(element string, slice []string) bool {
lowercasedElement := strings.TrimSpace(strings.ToLower(element))
return lo.Contains(slice, lowercasedElement)
}
func PinyinAbbr(source string) string {
abbr := pinyin.Pinyin(source, pinyin.NewArgs())
var abbrCollect = make([]string, 0)
for _, a := range abbr {
abbrCollect = append(abbrCollect, a[0][0:1])
}
finalAbbr := strings.Join(abbrCollect, "")
return finalAbbr
}
// 将给定结构体的内容通过JSON转换为`map[string]interface{}`类型的值
func ConvertStructToMap[T any](origin T) map[string]interface{} {
incr, _ := json.Marshal(origin)
var dest map[string]interface{}
json.Unmarshal(incr, &dest)
return dest
}
func ConvertSliceToInterfaceSlice[T any](origin []T) []interface{} {
dest := make([]interface{}, len(origin))
for i, e := range origin {
dest[i] = e
}
return dest
}
// 对指定的数组进行分区
func PartitionSlice[T any](slice []T, chunkSize int) [][]T {
var divided [][]T
for i := 0; i < len(slice); i += int(chunkSize) {
end := i + chunkSize
if end > len(slice) {
end = len(slice)
}
divided = append(divided, slice[i:end])
}
return divided
}
// 判断指定指针是否为空,如果为空,则返回指定默认值(指针形式)
func DefaultTo[T any](originValue *T, defaultValue T) T {
if originValue == nil {
return defaultValue
}
return *originValue
}
// 判断指定的指针是否为空,如果为空,则返回指定的默认字符串,或者返回指针所指内容的字符串形式。
func DefaultStrTo[T any](format string, originValue *T, defaultStr string) string {
if originValue == nil {
return defaultStr
}
return fmt.Sprintf(format, originValue)
}
// 判断指定表达式的值,根据表达式的值返回指定的值。相当于其他语言中的三目运算符。
func Cond[T any](expr bool, trueValue, falseValue T) T {
if expr {
return trueValue
}
return falseValue
}
// 使用给定的函数对指定的值进行判断,根据表达式的值返回指定的值。
func CondFn[T, R any](exprFn func(val T) bool, value T, trueValue, falseValue R) R {
return Cond(exprFn(value), trueValue, falseValue)
}
// 使用给定的函数对指定的值进行判断,如果表达式为真,则返回指定的值,否则返回另一个值。
func CondOr[T any](exprFn func(val T) bool, value, elseValue T) T {
return CondFn(exprFn, value, value, elseValue)
}