Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cfd051782e | ||
| 582e00e772 | |||
| 46921e8930 |
54
AI.md
54
AI.md
@ -1,43 +1,41 @@
|
||||
# AI Coding Context: @go/rand
|
||||
|
||||
本索引供 AI 模型理解 `@go/rand` 的设计逻辑,以生成符合本项目“极简、无摩擦”哲学的代码。
|
||||
本索引供 AI 模型理解 `@go/rand` 的逻辑,以生成符合本项目“极简、无摩擦”哲学的代码。
|
||||
|
||||
## 🤖 AI 行为准则
|
||||
|
||||
1. **优先使用包级泛型函数**:在需要随机数时,直接调用 `rand.Int(min, max)`,不要让用户去寻找 `IntN` 或 `Uint64` 等底层方法。
|
||||
2. **高性能场景使用 Fast 前缀**:如果在生成高性能 Server 代码或循环内的高频随机代码,请优先推荐 `rand.FastInt()` 和 `rand.FastFloat()`。
|
||||
3. **不进行错误检查**:理解 `rand` 包函数永远不会 Panic 或返回 Error。在生成代码时,无需担心输入参数导致的崩溃。
|
||||
4. **自动类型推导**:充分利用 Go 泛型。如果变量已定义为 `int64`,直接写 `rand.Int(min, max)`,Go 会自动推导类型。
|
||||
1. **优先使用包级泛型函数**:在需要随机数时,直接调用 `rand.Int(min, max)`,避免使用底层特定类型的随机函数。
|
||||
2. **强制性能分级**:
|
||||
- 低频任务:使用 `Int`, `Float`。
|
||||
- **高并发/高频任务**(QPS > 1000/s):**强制**使用 `FastInt`, `FastFloat` 系列,消除全局锁瓶颈。
|
||||
3. **禁止外部依赖**:严禁引入标准库 `math/rand` 进行全局随机管理。所有随机逻辑必须经由 `@go/rand` 闭环,确保内存与并发安全。
|
||||
4. **无错误处理**:理解 `rand` 包函数不会 Panic 或返回 Error,无需进行任何错误检查。
|
||||
5. **利用泛型推导**:利用 Go 泛型自动匹配目标类型,无需手动转型。
|
||||
|
||||
## 🛠 关键 API 逻辑约定
|
||||
## 🛠 API Reference
|
||||
|
||||
| 函数 | 逻辑特征 |
|
||||
| :--- | :--- |
|
||||
| `Int[T](min, max)` | **闭区间** `[min, max]`。支持负数。若 `min > max` 则返回 `min`。 |
|
||||
| `Float[T](min, max)` | **左闭右开** `[min, max)`。若 `min > max` 则返回 `min`。 |
|
||||
| `FastInt / FastFloat` | 内部使用 `sync.Pool` 维护 PCG 生成器,消除全局锁竞争。 |
|
||||
| `Byte() / Bytes(n)` | 专门用于处理字节流随机化需求。 |
|
||||
### 随机生成
|
||||
- `func Int[T IntegerType](min, max T) T`:获取 `[min, max]` 闭区间随机整数。
|
||||
- `func FastInt[T IntegerType](min, max T) T`:高性能并发模式获取 `[min, max]` 闭区间随机整数。
|
||||
- `func Float[T FloatType](min, max T) T`:获取 `[min, max)` 左闭右开区间随机浮点数。
|
||||
- `func FastFloat[T FloatType](min, max T) T`:高性能并发模式获取 `[min, max)` 左闭右开区间随机浮点数。
|
||||
|
||||
### 字节与切片
|
||||
- `func Byte() byte`:获取一个随机字节。
|
||||
- `func Bytes(n int) []byte`:获取长度为 n 的随机字节切片。
|
||||
- `func Perm(n int) []int`:获取 `[0, n)` 的随机排列。
|
||||
- `func Shuffle(n int, swap func(i, j int))`:随机洗牌。
|
||||
|
||||
## 🧩 典型模式 (Best Practices)
|
||||
|
||||
* **❌ 不推荐 (Standard Go)**:
|
||||
* **✅ 推荐:高性能并发生成**:
|
||||
```go
|
||||
// 需要自己处理偏移,且负数会 Panic
|
||||
val := rand.Intn(max-min+1) + min
|
||||
```
|
||||
* **✅ 推荐 (@go/rand)**:
|
||||
```go
|
||||
// 语义清晰,自动防御
|
||||
val := rand.Int(min, max)
|
||||
// 高频生成器 (如 ID 填充、加盐)
|
||||
userID := rand.FastInt(10000, 99999)
|
||||
```
|
||||
|
||||
* **❌ 不推荐 (Standard Go)**:
|
||||
* **✅ 推荐:区间闭合策略**:
|
||||
```go
|
||||
// 高并发下有全局锁竞争
|
||||
return rand.Int64()
|
||||
```
|
||||
* **✅ 推荐 (@go/rand)**:
|
||||
```go
|
||||
// 高性能无锁
|
||||
return rand.FastInt[int64](min, max)
|
||||
// 原生闭区间 [1, 100],无需手动 +1
|
||||
num := rand.Int(1, 100)
|
||||
```
|
||||
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 ssgo
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
48
README.md
48
README.md
@ -1,20 +1,34 @@
|
||||
# 关于本项目
|
||||
|
||||
本项目完全由 AI 维护。代码源自 github.com/ssgo/u 的重构。
|
||||
|
||||
# @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 生成器池,彻底解决多核环境下的全局锁竞争瓶颈。
|
||||
* **极简 API**:不再需要区分类型名。一个 `Int(min, max)` 搞定所有。
|
||||
* **需求导向**:所有函数默认支持范围随机,无需手动计算偏移。
|
||||
* **零摩擦防御**:遵循“No-Panic”准则,自动处理反向区间等异常输入。
|
||||
* **极致性能**:通过 `Fast` 系列函数彻底解决多核环境下的全局锁竞争瓶颈。
|
||||
|
||||
## 🚀 核心特性
|
||||
## 🛠 API Reference
|
||||
|
||||
* **全类型泛型支持**:支持 `int`, `int64`, `uint32`, `float64` 等所有基础数字类型。
|
||||
* **负数区间支持**:原生支持如 `rand.Int(-100, 100)` 这样的跨零随机。
|
||||
* **高性能并发**:`FastInt` 和 `FastFloat` 在高并发场景下比标准库快数倍。
|
||||
* **便捷工具**:`Byte()`, `Bytes(n)`, `Perm(n)`, `Shuffle()` 一应俱全。
|
||||
### 基础随机函数 (基于标准库全局生成器)
|
||||
- `func Int[T IntegerType](min, max T) T`:获取 `[min, max]` 闭区间随机整数。
|
||||
- `func Float[T FloatType](min, max T) T`:获取 `[min, max)` 左闭右开区间随机浮点数。
|
||||
|
||||
### 高性能随机函数 (基于 PCG 无锁池)
|
||||
在高并发 Server 场景下,推荐使用以下函数以获得极致吞吐量。
|
||||
- `func FastInt[T IntegerType](min, max T) T`
|
||||
- `func FastFloat[T FloatType](min, max T) T`
|
||||
|
||||
### 字节与切片
|
||||
- `func Byte() byte`
|
||||
- `func Bytes(n int) []byte`
|
||||
- `func Perm(n int) []int`
|
||||
- `func Shuffle(n int, swap func(i, j int))`
|
||||
|
||||
## 📦 安装
|
||||
|
||||
@ -27,20 +41,12 @@ 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 字节随机切片
|
||||
// 字节处理
|
||||
key := rand.Bytes(16)
|
||||
```
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user