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}