Golang package之math/rand
概述
go语言中的随机数应该说是伪随机, math/rand 实现了伪随机数生成器。
在go语言中随机数需要设置种子,如果不设置种子,随机数每次运行的结果相同,默认种子是1,且相同种子产生的随机数是相同的,为了保证种子不是固定的,可以采用当前时间的纳秒作为种子来生成随机数
示例1:
固定种子
func main() { // 固定种子 rand.Seed(1) // Intn(10) 左闭右开区间 [0,10) fmt.Println(rand.Intn(10), rand.Intn(10), rand.Intn(10)) fmt.Println(rand.Intn(10), rand.Intn(10), rand.Intn(10)) /* 值始终固定: 1 7 7 9 1 8 */ }
示例2:
使用时间戳产生随机种子
func main() { // 固定种子 rand.Seed(time.Now().UnixNano()) // Intn(10) 左闭右开区间 [0,10) fmt.Println(rand.Intn(10), rand.Intn(10), rand.Intn(10)) fmt.Println(rand.Intn(10), rand.Intn(10), rand.Intn(10)) /* 值每次都不同: 8 0 9 5 5 3 */ }