golang 随机数有一个很有趣的地方,如果我们不自行定义随机数种子的话,每次生成的随机数都是一样的。
比如 for
循环,打印 10 个随机数,每次运行结果是一模一样的。代码如下:
package main
import (
"fmt"
"math/rand"
)
func main() {
for index := 0; index < 10; index++ {
fmt.Println(rand.Intn(10))
}
}
第一次运行结果如下:
1
7
7
9
1
8
5
0
第二次运行结果如下:
1
7
7
9
1
8
5
0
golang 在默认随机的时候,固定以数字 1 作为种子。既然种子都固定了的话,那每次执行的结果当然是一样的。
要解决这个问题,就需要以时间作为随机数种子。代码如下:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for index := 0; index < 10; index++ {
fmt.Println(r.Intn(10))
}
}
这样就可以使用时间种子来获取不同的结果了。
网友评论