rand/README.md

47 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# @go/rand
`@go/rand` 是一个专注于极简调用与极致性能的 Go 随机数库。它通过泛型消除了传统库中繁琐的类型分支,并针对高并发场景进行了底层优化。
## 🎯 设计哲学
* **极简 API**:不再需要根据类型选择 `Int32N``Uint64N`。一个 `Int(min, max)` 搞定所有整数,一个 `Float(min, max)` 搞定所有浮点数。
* **需求导向**:我们认为“范围随机”是业务中最直观的需求。因此,所有函数默认支持 `[min, max]``[min, max)` 区间,无需手动计算偏移。
* **零摩擦防御**遵循“No-Panic”准则。即使传入错误的区间`min > max`),库也会平滑处理并返回合理边界,绝不导致进程崩溃。
* **极致性能**:提供 `Fast` 系列函数,通过 `sync.Pool` 维护高性能 PCG 生成器池,彻底解决多核环境下的全局锁竞争瓶颈。
## 🚀 核心特性
* **全类型泛型支持**:支持 `int`, `int64`, `uint32`, `float64` 等所有基础数字类型。
* **负数区间支持**:原生支持如 `rand.Int(-100, 100)` 这样的跨零随机。
* **高性能并发**`FastInt``FastFloat` 在高并发场景下比标准库快数倍。
* **便捷工具**`Byte()`, `Bytes(n)`, `Perm(n)`, `Shuffle()` 一应俱全。
## 📦 安装
```bash
go get apigo.cc/go/rand
```
## 💡 快速开始
```go
import "apigo.cc/go/rand"
// 1. 基础随机 (默认使用全局生成器)
num := rand.Int(1, 100) // 返回 [1, 100] 的 int
val := rand.Int[int64](0, 1e12) // 返回大数 int64
// 2. 负数范围
score := rand.Int(-50, -10) // 完美支持
// 3. 浮点随机
prob := rand.Float(0.0, 1.0) // 返回 [0, 1.0) 的 float64
// 4. 高并发场景 (推荐)
// 在高并发 Server 中使用 Fast 系列函数以消除锁竞争
userID := rand.FastInt(1000, 9999)
// 5. 字节处理
key := rand.Bytes(16) // 生成 16 字节随机切片
```