rand.go
1package logo
2
3import (
4 "math/rand/v2"
5 "sync"
6)
7
8var (
9 randCaches = make(map[int]int)
10 randCachesMu sync.Mutex
11)
12
13func cachedRandN(n int) int {
14 randCachesMu.Lock()
15 defer randCachesMu.Unlock()
16
17 if n, ok := randCaches[n]; ok {
18 return n
19 }
20
21 r := rand.IntN(n)
22 randCaches[n] = r
23 return r
24}