简言
1. go语言的随机数是最简单的模型,也就是从既定的数字中筛选符合条件的数字,毫无随机性可言
2. 想要真随机的话需要加上随机种子,这样其实也不是真正的随机,还是从既定数字中往后面筛选,只是开始拿数字的起点换了而已
实验如下图(可以看到无随机种子时,三次运行结果完全一样。加了随机种子后才变得随机)
代码如下
package main
import (
"fmt"
"math/rand"
"time"
)
// 无随机种子
func NoSrand() {
fmt.Println("无随机种子")
a := rand.Int31n(100)
b := rand.Int31n(100)
c := rand.Int31n(100)
d := rand.Int31n(100)
fmt.Printf("a=%v, b=%v, c=%v,d=%v \n", a, b, c, d)
}
// 有随机种子的
func Srand() {
fmt.Println("有随机种子")
rand.Seed(time.Now().UnixNano())
a := rand.Int31n(100)
b := rand.Int31n(100)
c := rand.Int31n(100)
d := rand.Int31n(100)
fmt.Printf("a=%v, b=%v, c=%v,d=%v \n", a, b, c, d)
}
func main() {
// 无随机种子的
NoSrand()
// 有随机种子的
Srand()
}