Go随机数的使用

随机数使用比较普遍,例如,抽奖、均衡等等。算法

下面简单说明其使用方法。dom

Example1

package main

import (
        "log"
        "math/rand"
)

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

output:code

$ ./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对象

其中import

rand.Intn(n int)随机数

返回[0,n)之间的随机数方法

每次执行时获得的结果都是同样的。im

没有调用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)是计算机专业术语,一种以随机数做为对象的以真随机数(种子)为初始条件的随机数。通常计算机的随机数都是伪随机数,以一个真随机数(种子)做为初始条件,而后用必定的算法不停迭代产生随机数。

种子通常使用当前的系统时间,这是彻底随机的。

相关文章
相关标签/搜索