golang代码实例库

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2211|回复: 0

golang:使用rand生成指定范围随机数

[复制链接]

82

主题

82

帖子

486

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
486
发表于 2022-8-3 20:43:21 | 显示全部楼层 |阅读模式
实例说明
我们使用math/rand生成指定范围的随机数
1)使用math/rand特别要注意,这里是伪随机数,如果种子相同,则第一次生成的随机数都是相同的。
2)我们每次都要设置随机种子,如time.Now().UnixNano()


实例代码
[Golang] 纯文本查看 复制代码
package main

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

// GetRandNum 获取指定范围的随机数
func GetRandNum(min, max int64) int64 {
	rand.Seed(time.Now().UnixNano())
	return rand.Int63n(max-min) + min
}

func main() {
	// 伪随机数,每次执行都返回同样都值
	x := rand.Int31()
	x1 := rand.Int31()
	fmt.Println(x)
	fmt.Println(x1)
	// 总是返回下面的值
	// 1298498081
	// 2019727887

	// 设置随机数种子,指定的种子值相同,则第一次调用随机数,返回的值也会相同。第二次也一样
	rand.Seed(time.Now().UnixNano())
	r := rand.Int31()
	r1 := rand.Int31()
	fmt.Println(r)
	fmt.Println(r1)
// 每次执行返回值不通,因为种子time.Now().UnixNano()每次都不同
// 767993627
// 1896616526


	// 获取指定范围的随机数
	num := GetRandNum(1000, 8888)
	fmt.Println(num)
// 每次执行返回值不通,因为种子time.Now().UnixNano()每次都不同
	// 6333
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|golang代码实例库 ( 粤ICP备2021162396号 )

GMT+8, 2024-12-5 08:10 , Processed in 0.033248 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表