package u import ( "fmt" "time" ) // P 是一个工具函数,用于在表达式内原地创建一个指针 func P[T any](v T) *T { return &v } func Z[T any](v *T) T { if v == nil { var zero T return zero } return *v } func X[T comparable](v T) *T { var zero T if v == zero { return nil } return &v } func Today() time.Time { var now = time.Now() return time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location()) } func Date(date time.Time) time.Time { return time.Date(date.Year(), date.Month(), date.Day(), 0, 0, 0, 0, date.Location()) } func SameDate(date time.Time) bool { var now = time.Now() return date.Year() == now.Year() && date.Month() == now.Month() && date.Day() == now.Day() } func Or[T any](v *T, or T) T { if v == nil { return or } else { return *v } } 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 }