简化api数量

This commit is contained in:
liuxiaobo 2025-06-08 17:59:35 +08:00
parent 42b4d56214
commit a30b918377
2 changed files with 49 additions and 50 deletions

View File

@ -11,45 +11,55 @@ func init() {
rd = rand.New(rand.NewSource(time.Now().UnixNano())) rd = rand.New(rand.NewSource(time.Now().UnixNano()))
} }
func Int() int { // 随机值
return rd.Int() func Rand[T int | int32 | int64 | uint32 | uint64 | float32 | float64]() T {
switch any(T(0)).(type) {
case int:
return T(rd.Int())
case int32:
return T(rd.Int31())
case int64:
return T(rd.Int63())
case uint32:
return T(rd.Uint32())
case uint64:
return T(rd.Uint64())
case float32:
return T(rd.Float32())
case float64:
return T(rd.Float64())
default:
panic("不支持的类型")
}
} }
// [0,n) // 从[0,n)范围里随机值
func IntN(n int) int { func RandN[T int | int32 | int64 | uint32 | uint64](n T) T {
return rd.Intn(n) if int64(n) < 1 {
return 0
}
switch any(n).(type) {
case int:
return T(rd.Intn(int(n))) // [0,n) 的随机整数
case int32:
return T(rd.Int31n(int32(n)))
case int64:
return T(rd.Int63n(int64(n)))
case uint32:
return T(rd.Uint32() % uint32(n)) // 注意:这里有小偏差
case uint64:
return T(rand.Uint64() % uint64(n))
default:
panic("不支持的类型")
}
} }
func Int31() int32 { // 从[0,n)范围里随机值
return rd.Int31() func RandRange[T int | int32 | int64 | uint32 | uint64](min, max T) T {
} if int64(max) < 1 || int64(min) < 1 || max < min {
return 0
func Int31n(n int32) int32 { }
return rd.Int31n(n) return RandN[T](max-min) + min
}
func Int63() int64 {
return rd.Int63()
}
func Int63n(n int64) int64 {
return rd.Int63n(n)
}
func Uint32() uint32 {
return rd.Uint32()
}
func Uint64() uint64 {
return rd.Uint64()
}
func Float32() float32 {
return rd.Float32()
}
func Float64() float64 {
return rd.Float64()
} }
func Perm(n int) []int { func Perm(n int) []int {
@ -66,11 +76,6 @@ func Shuffle[T any](slice []T) {
}) })
} }
// RandomInt64 随机生成一个[min, max]之间的整数
func RandomInt64(min, max int64) int64 {
return Int63n(max-min) + min
}
const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
func RandomString(n int) string { func RandomString(n int) string {

View File

@ -10,17 +10,11 @@ func TestShuffle(t *testing.T) {
func TestClean(t *testing.T) { func TestClean(t *testing.T) {
_ = t _ = t
_ = Int _ = Rand[int]
_ = Int31 _ = RandN[int]
_ = Int31n _ = RandRange[int]
_ = Int63
_ = Int63n
_ = Uint32
_ = Uint64
_ = Float32
_ = Float64
_ = Perm _ = Perm
_ = Read _ = Read
_ = RandomInt64
_ = RandomString _ = RandomString
} }