rand.go 297 B

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