package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
//名单
// 初始化 + 赋值一体化
names := map[int]string{
1: "aa",
2: "bb",
3: "cc",
4: "dd",
5: "ee",
6: "ff",
7: "gg",
8: "hh",
9: "ii",
10: "jj",
11: "kk",
12: "ll",
}
nums := generateRandomNumber(1, 12, 5)
for i := 0; i < 5; i++ {
fmt.Println(nums[i])
fmt.Println(names[nums[i]])
}
}
//生成若干个不重复的随机数
func RandomTestBase() {
//测试5次
for i := 0; i < 5; i++ {
nums := generateRandomNumber(1, 12, 5)
fmt.Println(nums)
}
}
//生成count个[start,end)结束的不重复的随机数
func generateRandomNumber(start int, end int, count int) []int {
//范围检查
if end < start || (end-start) < count {
return nil
}
//存放结果的slice
nums := make([]int, 0)
//随机数生成器,加入时间戳保证每次生成的随机数不一样
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for len(nums) < count {
//生成随机数返回一个取值范围在[0,n)的伪随机int值,如果n<=0会panic
num := r.Intn((end - start + 1)) + start //注意,这里不保护n
//查重
exist := false
for _, v := range nums {
if v == num {
exist = true
break
}
}
if !exist {
nums = append(nums, num)
}
}
return nums
}
输出:
3
cc
7
gg
12
ll
5
ee
6
ff