Go隨機數的使用


隨機數使用比較廣泛,例如,抽獎、均衡等等。

下面簡單說明其使用方法。

Example1

package main

import (
        "log"
        "math/rand"
)

func main() {
        i := rand.Intn(3)
        log.Println(i)
}

output:

$ ./t
2018/02/24 11:40:58 2
$ ./t
2018/02/24 11:40:59 2
$ ./t
2018/02/24 11:41:00 2
$ ./t
2018/02/24 11:41:01 2
$ ./t
2018/02/24 11:41:02 2
$ ./t
2018/02/24 11:41:02 2
$ ./t
2018/02/24 11:41:03 2
$ ./t
2018/02/24 11:41:04 2

其中

rand.Intn(n int)

返回[0,n)之間的隨機數

每次執行時得到的結果都是一樣的。

沒有調用Seed時, 默認使用Seed(1)。種子不變,產生的隨機數就會不變。

Example2

package main

import (
        "log"
        "math/rand"
        "time"
)

func main() {
        rand.Seed(time.Now().UnixNano())
        i := rand.Intn(3)
        log.Println(i)
}

output

$ ./t
2018/02/24 11:43:29 0
$ ./t
2018/02/24 11:43:31 2
$ ./t
2018/02/24 11:43:33 1
$ ./t
2018/02/24 11:43:34 2
$ ./t
2018/02/24 11:43:35 0
$ ./t
2018/02/24 11:43:36 2
$ ./t
2018/02/24 11:43:37 1
$ ./t
2018/02/24 11:43:38 1
$ ./t
2018/02/24 11:43:39 2
$ ./t
2018/02/24 11:43:40 2
$ ./t
2018/02/24 11:43:44 0

使用時間作為種子,輸出完全隨機數。

Example3

package main

import (
        "log"
        "math/rand"
        "time"
)


func main() {
        rand.Seed(time.Now().UnixNano())
        log.Println(rand.Perm(3))
}

output:

$ ./t
2018/02/24 12:04:27 [0 1 2]
$ ./t
2018/02/24 12:04:28 [0 2 1]
$ ./t
2018/02/24 12:04:30 [0 2 1]
$ ./t
2018/02/24 12:04:32 [0 1 2]

Perm(n)產生[0,n)的偽隨機序列。

關於種子

隨機種子(Random Seed)是計算機專業術語,一種以隨機數作為對象的以真隨機數(種子)為初始條件的隨機數。一般計算機的隨機數都是偽隨機數,以一個真隨機數(種子)作為初始條件,然后用一定的算法不停迭代產生隨機數。

種子一般使用當前的系統時間,這是完全隨機的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM