Golang生成随机数案例实战

简介: 关于如何使用Go语言生成随机数的三个案例教程。

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

一.生成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]\n", 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]\n", 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]\n", index, num)
    }

}

目录
相关文章
|
7月前
|
NoSQL 测试技术 Go
【Golang】国密SM2公钥私钥序列化到redis中并加密解密实战_sm2反编(1)
【Golang】国密SM2公钥私钥序列化到redis中并加密解密实战_sm2反编(1)
|
3月前
|
Go
Golang的time.NewTimer单次定时器使用案例
这篇文章介绍了Go语言中time包的多种定时器使用案例,包括单次定时器的创建、阻塞程序运行的Sleep函数、重置和停止定时器的方法,以及After和AfterFunc函数的使用。
59 5
Golang的time.NewTimer单次定时器使用案例
|
3月前
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
75 3
Golang语言之Prometheus的日志模块使用案例
|
3月前
|
Linux Go 开发工具
Golang各平台环境搭建实战
这篇文章详细介绍了如何在Windows、Linux和Mac平台上搭建Golang开发环境,包括下载和安装Go SDK、配置环境变量、安装开发工具如Visual Studio Code和Go扩展,以及如何编写和运行第一个Go程序。
135 3
|
3月前
|
Go
Golang语言基本数据类型默认值及字符串之间互相转换案例
这篇文章讲解了Golang语言中基本数据类型的默认值、类型转换的概述以及整型、浮点型、字符串之间的相互转换案例,包括如何将基本数据类型转换为字符串类型和字符串类型转换为基本数据类型,以及字符串与字节切片之间的转换。
33 2
|
3月前
|
Go
Golang语言数据类型分类及进制转换案例
这篇文章详细介绍了Go语言中数据类型的分类、进制转换的概念和实例,以及数字字面量语法,还涉及了原码、反码和补码的相关知识。
26 0
Golang语言数据类型分类及进制转换案例
|
3月前
|
Go
Golang的time.NewTicker周期性定时器使用案例
这篇文章介绍了Golang中time包的NewTicker函数如何创建周期性定时器,并通过两个示例展示了如何使用定时器以及如何停止定时器。
79 1
|
4月前
|
NoSQL Java 测试技术
Golang内存分析工具gctrace和pprof实战
文章详细介绍了Golang的两个内存分析工具gctrace和pprof的使用方法,通过实例分析展示了如何通过gctrace跟踪GC的不同阶段耗时与内存量对比,以及如何使用pprof进行内存分析和调优。
115 0
Golang内存分析工具gctrace和pprof实战
|
7月前
|
存储 测试技术 Go
Golang框架实战-KisFlow流式计算框架(2)-项目构建/基础模块-(上)
KisFlow项目源码位于&lt;https://github.com/aceld/kis-flow,初始阶段涉及项目构建和基础模块定义。首先在GitHub创建仓库,克隆到本地。项目目录包括`common/`, `example/`, `function/`, `conn/`, `config/`, `flow/`, 和 `kis/`。`go.mod`用于包管理,`KisLogger`接口定义了日志功能,提供不同级别的日志方法。默认日志对象`kisDefaultLogger`打印到标准输出。
670 8
Golang框架实战-KisFlow流式计算框架(2)-项目构建/基础模块-(上)
|
7月前
|
JSON JavaScript 前端开发
Golang深入浅出之-Go语言JSON处理:编码与解码实战
【4月更文挑战第26天】本文探讨了Go语言中处理JSON的常见问题及解决策略。通过`json.Marshal`和`json.Unmarshal`进行编码和解码,同时指出结构体标签、时间处理、omitempty使用及数组/切片区别等易错点。建议正确使用结构体标签,自定义处理`time.Time`,明智选择omitempty,并理解数组与切片差异。文中提供基础示例及时间类型处理的实战代码,帮助读者掌握JSON操作。
187 1
Golang深入浅出之-Go语言JSON处理:编码与解码实战