簡言
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()
}