golang中的随机数问题

时间:2017-07-29 22:34:09

标签: go random

这是我正在使用的代码:

package main
import "fmt"
import "math/rand"

func main() {
    code := rand.Intn(900000)
    fmt.Println(code)
}

它始终返回698081。我不明白,这是什么问题?

  

https://play.golang.org/p/XisNbqCZls

修改

我尝试了rand.Seed

package main

import "fmt"
import "time"
import "math/rand"

func main() {
    rand.Seed(time.Now().UnixNano())
    code := rand.Intn(900000)
    fmt.Println(code)
}

没有变化。现在它总是返回452000

  

https://play.golang.org/p/E_Wfm5tOdH

     

https://play.golang.org/p/aVWIN1Eb84

1 个答案:

答案 0 :(得分:13)

您在操场上看到相同结果的几个原因

  1. Golang游乐场将缓存结果
  2. 操场上的时间总是在同一时间开始,以使操场确定性。
  3. 最后但并非最不重要的是,rand软件包默认种子为1,这将使结果具有确定性。如果您放置rand.Seed(time.Now().UnixNano()),则每次执行时都会收到不同的结果。请注意,由于上述第二个原因,这不会在操场上工作。