作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.生成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)
}
}