go语言中的随机数应该说是伪随机
- math/rand实现了伪随机数生成器
- 在go语言中随机数需要设置种子,如果不设置种子,随机数每次运行的结果相同
- 默认种子是1,且相同种子产生的随机数是相同的
- 为了保证种子不是固定的,可以采用当前时间的纳秒作为种子来生成随机数
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
test5()
test6()
}
func test5() {
// 种子固定
rand.Seed(1)
// Intn(10) 左闭右开区间 [0,10)
fmt.Println(rand.Intn(10), rand.Intn(10), rand.Intn(10), rand.Intn(10))
/*
第一次执行:1 7 7 9
第二次执行:1 7 7 9
第三次执行:1 7 7 9
*/
}
func test6() {
// 种子可变
rand.Seed(time.Now().UnixNano())
fmt.Println(rand.Intn(10), rand.Intn(10), rand.Intn(10), rand.Intn(10))
/*
第一次执行:2 4 3 1
第二次执行:3 5 8 1
第三次执行:3 8 1 7
*/
}