Golang生成随机数案例实战

                 Golang生成随机数案例实战

                                 作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。 

一.生成1个[0-99]的随机数案例

package main

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

func main() {

    /*
        rand.Seed:
            还函数是用来创建随机数的种子,如果不执行该步骤创建的随机数是一样的,因为默认Go会使用一个固定常量值来作为随机种子。

        time.Now().UnixNano():
            当前操作系统时间的毫秒值
    */
    rand.Seed(time.Now().UnixNano())

    /*
        生成一个随机数
    */
    a := rand.Intn(100) //实际随机生成的数字范围[0,99]
    fmt.Printf("a的类型为[%T],a的随机数值为:[%d]
", a, a)
}

二.生成10个[200-500]的随机数案例

package main

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

func main() {

    /*
        rand.Seed:
            还函数是用来创建随机数的种子,如果不执行该步骤创建的随机数是一样的,因为默认Go会使用一个固定常量值来作为随机种子。

        time.Now().UnixNano():
            当前操作系统时间的毫秒值
    */
    rand.Seed(time.Now().UnixNano())

    /*
        生成十个随机数[200-500]
    */
    for index := 1; index <= 10; index++ {
        random_number := rand.Intn(301) + 200
        fmt.Printf("第[%d]个随机数的值为:[%d]
", index, random_number)
    }
}

三.烧脑版生成随机数[需要指针知识]

package main

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

func getRandomNumber(p *int, start_pos int, stop_pos int) {
    /*
        rand.Seed:
            还函数是用来创建随机数的种子,如果不执行该步骤创建的随机数是一样的,因为默认Go会使用一个固定常量值来作为随机种子。

        time.Now().UnixNano():
            当前操作系统时间的毫秒值
    */
    rand.Seed(time.Now().UnixNano())

    random_number := rand.Intn(stop_pos-start_pos) + start_pos

    /*
        将指针作为参数传递,形参间接修改实参的值
    */
    *p = random_number
}

func main() {

    /*
        定义要生成随机值的范围
    */
    var (
        start_pos int = 200
        stop_pos  int = 500
        num       int
    )

    for index := 1; index <= 10; index++ {
        /*
            每次循环时让CPU休息1毫秒,因为CPU执行太快,可能10此循环几乎在同一纳秒执行完毕。

            我暂时想到的解决方案有两种:
                (1)以形参的方式传入随机种子值
                (2)让主线程在不同的时间段调用函数

            上面两种思路均可,我为了省事情就直接让主线程休眠1毫秒,即采用了第二种解决方案。
        */
        time.Sleep(1)

        getRandomNumber(&num, start_pos, stop_pos)
        fmt.Printf("第[%d]个随机数的值为:[%d]
", index, num)
    }

}

原文地址:https://www.cnblogs.com/yinzhengjie/p/12208030.html