加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

你如何在Go中生成随机uint64?

发布时间:2020-12-14 04:19:42 所属栏目:Windows 来源:网络整理
导读:Go的数学/随机库缺少一个生成64位数字的函数.这已经是 an open issue大约四年了.与此同时,变通方法是什么样的? 最简单的方法是拨打 rand.Uint32() 两次: func Uint64() uint64 { return uint64(rand.Uint32())32 + uint64(rand.Uint32())} 另一种选择是调
Go的数学/随机库缺少一个生成64位数字的函数.这已经是 an open issue大约四年了.与此同时,变通方法是什么样的?
最简单的方法是拨打 rand.Uint32()两次:
func Uint64() uint64 {
    return uint64(rand.Uint32())<<32 + uint64(rand.Uint32())
}

另一种选择是调用rand.Read()(was added in Go 1.7)读取8个字节,然后使用encoding/binary包从中获取uint64值:

func Uint64() uint64 {
    buf := make([]byte,8)
    rand.Read(buf) // Always succeeds,no need to check error
    return binary.LittleEndian.Uint64(buf)
}

注意:作为rand.Read()的文档状态,它总是读取与传递的片的长度一样多的字节,并且它总是返回nil错误,因此在这种情况下不需要检查错误.

注意#2:您也可以使用binary.BigEndian而不是binary.LittleEndian,因为我们使用其所有字节生成随机数,字节顺序完全无关紧要.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读