Files
web_huangguo2_server/pub/common/utils/utils.go
T
2026-09-29 10:47:38 +08:00

64 lines
1.3 KiB
Go

package utils
import (
"fmt"
"math/rand"
"runtime/debug"
"strings"
"time"
"videoweb/pub/common/log"
"golang.org/x/exp/constraints"
)
func RecoverError(onError func(err error)) {
if r := recover(); r != nil {
err := fmt.Errorf("internal error: %v", r)
if onError != nil {
onError(err)
}
log.Error(fmt.Sprintf("[Panic] RecoverError err: %+v\n", r) + string(debug.Stack()))
}
}
func GetRandom(min, max int) int64 {
rand.Seed(time.Now().UnixNano())
return int64(rand.Intn(max-min+1) + min)
}
func EnsureRange[T constraints.Ordered](value, min, max T) T {
if value < min {
value = min
}
if value > max {
value = max
}
return value
}
func InRange[T constraints.Ordered](value, min, max T) bool {
if value < min {
return false
}
if value > max {
return false
}
return true
}
// Shuffle 使用 Fisher-Yates 算法对切片进行随机排序
func Shuffle[T any](slice []T) {
rand.Seed(time.Now().UnixNano())
n := len(slice)
for i := n - 1; i > 0; i-- {
j := rand.Intn(i + 1)
slice[i], slice[j] = slice[j], slice[i]
}
}
func GetRandomMacAddress() string {
buf := make([]byte, 6)
rand.Read(buf)
buf[0] |= 2
mac := fmt.Sprintf("%02x:%02x:%02x:%02x:%02x:%02x", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5])
return strings.ToUpper(mac)
}