golang随机数生成踩过的坑记录一下

不废话了,直接上代码:

package main import ( 'fmt' 'math/rand' ) func main() { fmt.Println(rand.Intn(100)) fmt.Println(rand.Intn(100)) }

运行测试一下,
$ go run rand.go
81
87

OK,看似没问题,但再运行一次看看:

$ go run rand.go
81
87

输出的结果完全一样,查看官网上的例子:

package main

import (
'fmt'
'math/rand'
)

func main() {
rand.Seed(42) // Try changing this number! 注意,注意,注意,重要的事情说三遍
answers := []string{
'It is certain',
'It is decidedly so',
'Without a doubt',
'Yes definitely',
'You may rely on it',
'As I see it yes',
'Most likely',
'Outlook good',
'Yes',
'Signs point to yes',
'Reply hazy try again',
'Ask again later',
'Better not tell you now',
'Cannot predict now',
'Concentrate and ask again',
'Don't count on it',
'My reply is no',
'My sources say no',
'Outlook not so good',
'Very doubtful',
}
fmt.Println('Magic 8-Ball says:', answers[rand.Intn(len(answers))])
}

我这边运行输出如下:
Magic 8-Ball says: As I see it yes
多运行几次,输出结果不变。按照注释中说的,修改rand.Seed(42),随便改这里的值:rand.Seed(2),结果如下:
Magic 8-Ball says: Most likely
多运行几次还是不变,所以关键在rand.Seed()这里,查看文档:
func (r *Rand) Seed(seed int64)
Seed uses the provided seed value to initialize the generator to a deterministic state.
Seed使用提供的seed值将发生器初始化为确定性状态。不是很理解这句话的意思,修改一下一开始的代码试试:

package main import ( 'fmt' 'math/rand' 'time' ) func main() { rand.Seed(time.Now().Unix()) fmt.Println(rand.Intn(100)) fmt.Println(rand.Intn(100)) }

$ go run rand.go

9
46
$ go run rand.go
78
98

OK,每次运行产生的输出不一样了。

几点注意项:

1、如果不使用rand.Seed(seed int64),每次运行,得到的随机数会一样,程序不停止,一直获取的随机数是不一样的;

2、每次运行时rand.Seed(seed int64),seed的值要不一样,这样生成的随机数才会和上次运行时生成的随机数不一样;

3、rand.Intn(n int)得到的随机数int i,0 <= i < n。
---------------------

(0)

相关推荐

  • Go基础及语法(一)

    Go语言文件基础语法 package main //管理定义模块import "fmt" //导入模块/*主函数打印Hello,world!*/func main() {fmt.P ...

  • Go map定义的几种方式以及修改技巧

    原文链接:http://www.zhoubotong.site/post/24.html 直入正题,我们看下以下代码: package mainimport ( "encoding/json ...

  • [基础语法]-第002节:常量的使用

    一.常量的使用 1.1 常量声明 常量是一个简单值的标识符,在程序运行时,不会被修改的量. const identifier [type] = value 显式类型定义: const b string ...

  • springboot提交文件和参数类到后台(踩坑记录)

    原本以为类和文件不能一起提交,于是把文件当成类的属性写在类里,然后controller通过getValue得到文件达到该目的. 后来试了一下,requestParam写类的各个属性,文件放在body, ...

  • CMOS器件输入管脚不能悬空?硬件调试踩坑记录

    前言 最近在调试一块板卡时,发现了一个奇怪的问题,一款反相器--CD4049出现异常发热现象.虽然板卡已经做过温箱老化试验了,即在60度恒温条件下最大功率运行24小时,运行还算正常.但是一次偶然的机会 ...

  • samtools安装踩坑记录

    问题描述: 我用conda安装的samtools软件 但是在使用samtools的时候,总是报错,没有载入samtools的库文件(动态库缺失) samtools: error while loadi ...

  • 学员分享-aspera踩坑记录

    总有一些难关,需要帮助才能跨过去,一起来看看学员的真实反馈吧! 下面是第五期生信入门学员的分享 介绍一下自己,一枚生信小白,研一在读,之前基本没有生信基础. 19年开学的时候是打算自学,偶然间发现生信 ...

  • 踩坑记录之csv数据导入MySQL

    可能采坑的操作 将excel表格转换成csv 逗号分隔,然后notepad检查文件是否是utf8编码,保存. 打开 phpMyAdmin , 选择要导入的表格,然后点击导入: 导入设置 点击执行之后, ...

  • wifi组网踩坑记录!买了8个路由器,4个是垃圾!华为小米TPlink腾达……结果傻眼!2019装修日记015

    解决个wifi死角,咋就这么费劲?   为了保持叙事的连贯性-- 请允许我模仿下美剧开场~~   前情提要(Previously on WiFi): 170平的大平层,没有做网线改造,只能靠wifi连 ...

  • 使用velocyto进行bam转loom吐血踩坑记录

    报错信息如下: Traceback (most recent call last):   File "miniconda3/envs/velocyto/bin/velocyto", ...

  • uni-app 开发随笔(踩坑记录)

    这里总结一些uni-app开发时我遇到的坑 uni-app获取元素高度及屏幕高度(uni-app不可使用document) uni.getSystemInfo({ success: function( ...

  • 微信小程序之踩坑与填坑记录(持续更新...)

    之前主要做Java开发,前些时间有机会接触了小程序开发,也挺有意思的,不过在开发微信小程序过程中也遇到了很多坑,特此记录一下所有的坑和解决方案,持续更新······ 一. 注意事项 1.微信小程序的缓 ...