每次设置相同的种子,您将获得相同的序列。因此,当然,如果您将种子设置为快速循环中的时间,则可能会多次调用相同的种子。
在您的情况下,在您调用
randInt函数直到拥有不同的值之前,您正在等待时间(由Nano返回)。
对于所有伪随机库,您只需设置一次种子,例如在初始化程序时,除非您特别需要重现给定的序列(通常仅用于调试和单元测试)。
之后,您只需调用
Intn即可获取下一个随机整数。
将
rand.Seed(time.Now().UTC().UnixNano())行从randInt函数移至main的开头,一切将会更快。
还请注意,我认为您可以简化字符串的构建:
package mainimport ( "fmt" "math/rand" "time")func main() { rand.Seed(time.Now().UTC().UnixNano()) fmt.Println(randomString(10))}func randomString(l int) string { bytes := make([]byte, l) for i := 0; i < l; i++ { bytes[i] = byte(randInt(65, 90)) } return string(bytes)}func randInt(min int, max int) int { return min + rand.Intn(max-min)}


