• 主要提供了一些伪随机数的生成方法,但是不适合安全敏感类的程序。原因是每个相同seed生成的随机数序列都是一样的;
  • 默认源是线程安全的,但是由NewSource生成的源并不是线程安全的;
  • 如果要写安全敏感类程序,最好使用crypto/rand包中的方法;

example

  1. func main() {
  2. // 如果想每次使用不同的种子,可以将42替换为time.Now().UnixNano(),表示
  3. // 自UTC 1970年1月1日以来到当前系统时间所经过的纳秒数
  4. // 每次根据系统时间来确定种子
  5. rand.Seed(42)
  6. answers := []string{
  7. "It is certain",
  8. "It is decidedly so",
  9. "Without a doubt",
  10. "Yes definitely",
  11. "You may rely on it",
  12. "As I see it yes",
  13. "Most likely",
  14. "Outlook good",
  15. "Yes",
  16. "Signs point to yes",
  17. "Reply hazy try again",
  18. "Ask again later",
  19. "Better not tell you now",
  20. "Cannot predict now",
  21. "Concentrate and ask again",
  22. "Don't count on it",
  23. "My reply is no",
  24. "My sources say no",
  25. "Outlook not so good",
  26. "Very doubtful",
  27. }
  28. fmt.Println("Magic 8-Ball says:", answers[rand.Intn(len(answers))])
  29. }

func

func Seed(seed int64)

  1. // 修改默认源
  2. // 如果没有调用该函数,则生成器会默认调用Seed(1)
  3. // 与Rand.Seed不同,rand.Seed为线程安全的
  4. func Seed(seed int64) { globalRand.Seed(seed) }

func Intn(n int) int

  1. // 返回[0, n)的一个伪随机数
  2. func Intn(n int) int { return globalRand.Intn(n) }