翔云

Just try, don't shy. 最新文章请点击
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Go随机数的使用

Posted on 2018-02-24 12:14  翔云123456  阅读(10855)  评论(0编辑  收藏  举报

随机数使用比较广泛,例如,抽奖、均衡等等。

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

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

种子一般使用当前的系统时间,这是完全随机的。