go中的rand.Int() 为什么每次返回的都是同一个值,并不是随机?
比如下面的代码:
返回的永远都是
5577006791947779410
原因是每次没有调用rand.Seed(xxxx), 导致随机种子都是 1 。 见官方文档
所以如果想要每次随机值不一样
需要用时间戳作为随机种子
package main
import "math/rand"
func GenRandom() chan int {
ch := make(chan int, 10)
go func() {
for {
ch <- rand.Int()
}
}()
return ch
}
func main() {
ch := GenRandom()
println(<-ch)
println("end of main")
}
返回的永远都是
5577006791947779410
原因是每次没有调用rand.Seed(xxxx), 导致随机种子都是 1 。 见官方文档
Seed uses the provided seed value to initialize the default Source to a deterministic state. If Seed is not called, the generator behaves as if seeded by Seed(1).
所以如果想要每次随机值不一样
需要用时间戳作为随机种子
func GenRandom() chan int {
ch := make(chan int, 10)
go func() {
rand.Seed(time.Now().Unix())
for {
ch <- rand.Intn(200)
}
}()
return ch
}