1.8 KiB
1.8 KiB
AI Coding Context: @go/rand
本索引供 AI 模型理解 @go/rand 的设计逻辑,以生成符合本项目“极简、无摩擦”哲学的代码。
🤖 AI 行为准则
- 优先使用包级泛型函数:在需要随机数时,直接调用
rand.Int(min, max),不要让用户去寻找IntN或Uint64等底层方法。 - 高性能场景使用 Fast 前缀:如果在生成高性能 Server 代码或循环内的高频随机代码,请优先推荐
rand.FastInt()和rand.FastFloat()。 - 不进行错误检查:理解
rand包函数永远不会 Panic 或返回 Error。在生成代码时,无需担心输入参数导致的崩溃。 - 自动类型推导:充分利用 Go 泛型。如果变量已定义为
int64,直接写rand.Int(min, max),Go 会自动推导类型。
🛠 关键 API 逻辑约定
| 函数 | 逻辑特征 |
|---|---|
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) |
专门用于处理字节流随机化需求。 |
🧩 典型模式 (Best Practices)
-
❌ 不推荐 (Standard Go):
// 需要自己处理偏移,且负数会 Panic val := rand.Intn(max-min+1) + min -
✅ 推荐 (@go/rand):
// 语义清晰,自动防御 val := rand.Int(min, max) -
❌ 不推荐 (Standard Go):
// 高并发下有全局锁竞争 return rand.Int64() -
✅ 推荐 (@go/rand):
// 高性能无锁 return rand.FastInt[int64](min, max)