栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在golang中获取随机数样本?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在golang中获取随机数样本?

您所做的是干净,快速的。您可以改进的是预分配切片,并使用如下

for.. range
循环填充它:

s := make([]int, 5)for i := range s {    s[i] = rand.Intn(100)}

math/rand
封装还具有
rand.Read()
填充用随机字节切片功能。因此,如果您想
[]byte
用随机数据填充一个切片,这就是所有必要的工作:

s := make([]byte, 100)rand.Read(s) // This never returns an error

另一个有趣的方法是利用

rand.Rand
成为一个
io.Reader
。这意味着它具有
Read()
一种
[]byte
用随机数据填充的方法。

结合

encoding/binary
软件包,您可以用随机数据“填充”变量。创建a
rand.Rand
并将其
binary.Read()
作为源传递给函数,仅此而已。

它是这样的:

r := rand.New(rand.NewSource(time.Now().UnixNano()))s := make([]int32, 5)err := binary.Read(r, binary.BigEndian, &s)if err != nil {    panic(err)}fmt.Println(s)

输出:

[203443513 1611652563 -235795288 8294855 -802604260]

这足够“酷”,甚至可以填充结构,例如:

var point struct{ X, Y int16 }err = binary.Read(r, binary.BigEndian, &point)if err != nil {    panic(err)}fmt.Printf("%+v", point)

输出:

{X:-15471 Y:2619}

在Go Playground上尝试这些示例。

使用的一个障碍

binary.Read()
是-可以理解-
它只能填充固定大小类型的值,最著名的例外是普通
int
类型,其大小不固定(取决于体系结构)。因此,您无法
[]int
使用
int
类型字段填充切片或结构。这就是为什么我在上面的示例中使用
int32
int16
类型。

当然,在这些解决方案中,您不能限制用于填充变量的随机数的范围。为此,初始循环仍然更容易。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/448193.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号