Files
web_huakui_server/pub/common/utils/utils.go
T
rootandClaude Opus 4.7 85c0071fd8 feat: 从黄果 NET hgdjnet-server 9bfbafe 导入 HKDJ 官网后端
来源:hgdjnet-server 9bfbafe10d417deea959bd53117bc88a10e60a83
项目身份 HKDJ / JHA-216,独立官网仓库,Jenkins 守卫键 hkdjnet
测试目录 /server/hkdj_net,App/Web API 30331/30332

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-10-16 11:20:04 +08:00

64 lines
1.3 KiB
Go

package utils
import (
"fmt"
"hkdj-web-server/pub/common/log"
"math/rand"
"runtime/debug"
"strings"
"time"
"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)
}