我注意到在多种语言中,随机数的生成有一个随机数种子的概念,如果使用不当,将可能生成相同的随机数,例如:
使用go生成一个随机字符串:
const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
func randomString(n int) string {
b := make([]byte, n)
// [1]
// rand.Seed(time.Now().Unix()) 打开此处得到正确的随机数
for i := range b {
// [2]
// rand.Seed(time.Now().Unix()) 打开此处每次得到相同的随机数
b[i] = letterBytes[rand.Intn(len(letterBytes))]
}
//打开【2】得到类似 [71 71 71 71 71 71 71 71 71 71]的相同结果
//打开【1】得到类似 [75 111 79 115 101 73 120 66 71 83]的正常结果
fmt.Println(b)
return string(b)
}
func main() {
s := randomString(10)
fmt.Println(s)
}
我知道如何得到正确的随机数,但我并不清楚随机数生成如何基于或者依赖于随机数种子,请问有人能 简单通俗 的说明一下 随机数种子如何工作吗?