package u import ( "fmt" "time" ) // ==================== // 逻辑 // ==================== func Else[T any](v *T, or T) T { if v == nil { return or } else { return *v } } // 三元表达式 func Ternary[T any](condition bool, trueValue T, falseValue T) T { if condition { return trueValue } else { return falseValue } } // ==================== // 指针 // ==================== // P 原地创建值的指针 func P[T any](v T) *T { return &v } // Z 转换值为不可空,如果值为 nil,则返回其零值 func Z[T any](v *T) T { if v == nil { var zero T return zero } return *v } // X 转换值为可空,如果值为零值,则返回 nil func X[T comparable](v T) *T { var zero T if v == zero { return nil } return &v } // N 零值视为 nil func N[T comparable](v *T) *T { if v == nil { return nil } var zero T if *v == zero { return nil } return v } // ==================== // 数组 // ==================== func Map[T any, R any](src []T, convert func(T) R) []R { dst := make([]R, len(src)) for i, item := range src { dst[i] = convert(item) } return dst } // ==================== // 时间 // ==================== func DateHead(date time.Time) time.Time { var y, m, d = date.Date() return time.Date(y, m, d, 0, 0, 0, 0, date.Location()) } func DateTail(date time.Time) time.Time { var y, m, d = date.Date() return time.Date(y, m, d, 23, 59, 59, 999999999, date.Location()) } func Today() time.Time { return DateHead(time.Now()) } func IsSameDate(date1, date2 time.Time) bool { var y1, m1, d1 = date1.Date() var y2, m2, d2 = date2.Date() return y1 == y2 && m1 == m2 && d1 == d2 } func IsToday(date time.Time) bool { return IsSameDate(date, time.Now()) } // ==================== // 错误 // ==================== func CombineErrors(errs []error) error { var combinedErr error = nil for _, err := range errs { if err != nil { if combinedErr == nil { combinedErr = err } else { combinedErr = fmt.Errorf("%v; %w", combinedErr, err) } } } return combinedErr } // ==================== // 业务 // ==================== func MaskPhone(phone string) string { if len(phone) < 11 { return phone } return phone[:3] + "****" + phone[7:] } func MaskIdNo(idNo string) string { if len(idNo) < 18 { return idNo } return idNo[:3] + "*********" + idNo[14:] }