Golang 取范围随机数

代码

  1. package main
  2. import (
  3. "log"
  4. "math/rand"
  5. "time"
  6. )
  7. // 范围随机数 (包含最大值和最小值,可从 0 开始)
  8. func GetRangeRandomNumbersA(min, max int) int {
  9. r := rand.New(rand.NewSource(time.Now().UnixNano()))
  10. if min >= max || min < 0 || max < 0 {
  11. return max
  12. }
  13. min--
  14. rn := r.Intn(max-min) + min
  15. if rn != max {
  16. rn++
  17. }
  18. return rn
  19. }
  20. // 取范围随机数 (不包含最大值,不可从 0 开始)
  21. func GetRangeRandomNumbersB(min, max int) int {
  22. r := rand.New(rand.NewSource(time.Now().UnixNano()))
  23. if min >= max || min == 0 || max == 0 {
  24. return max
  25. }
  26. return r.Intn(max-min) + min
  27. }
  28. func main() {
  29. for i := 0; i < 10; i++ {
  30. log.Println("A", GetRangeRandomNumbersA(0, 3))
  31. }
  32. for i := 0; i < 10; i++ {
  33. log.Println("B", GetRangeRandomNumbersA(1, 3))
  34. }
  35. }

输出

  1. main.go:22: 134
  2. main.go:22: 252
  3. main.go:22: 138
  4. main.go:22: 159
  5. main.go:22: 289
  6. main.go:22: 287
  7. main.go:22: 277
  8. main.go:22: 110
  9. main.go:22: 258
  10. main.go:22: 259

Golang 取得N个的不重复范围随机数

  1. package main
  2. import (
  3. "log"
  4. "math/rand"
  5. "time"
  6. )
  7. // 范围随机数
  8. func GetRangeRandomNumbers(min, max int) int {
  9. r := rand.New(rand.NewSource(time.Now().UnixNano()))
  10. if min >= max || min == 0 || max == 0 {
  11. return max
  12. }
  13. return r.Intn(max-min) + min
  14. }
  15. // 取得N个的不重复范围随机数
  16. func GetNotRepeatRandomNumbers(min int, max int, number int) []int {
  17. unique := make(map[int]bool)
  18. ret := make([]int, number)
  19. // 如果最大值-最小值,小于可用总数, 直接会死循环,直接返回0
  20. if (max - min) < number {
  21. return ret
  22. }
  23. for len(unique) < number {
  24. unique[GetRangeRandomNumbers(min, max)] = true
  25. }
  26. i := 0
  27. for k, _ := range unique {
  28. ret[i] = k
  29. i++
  30. }
  31. return ret
  32. }
  33. func main() {
  34. rn := GetNotRepeatRandomNumbers(10, 99, 10) //[72 56 64 40 93 34 66 89 88 18]
  35. log.Println(rn)
  36. }

参考

https://www.cnblogs.com/HachikoT/p/15941915.html
https://zhuanlan.zhihu.com/p/94684495