Random 生成加密随机整数最小值、最大值
我试图生成一个随机数,一个最小值和一个最大值, 但我似乎对这件事迷茫了,怎么了Random 生成加密随机整数最小值、最大值,random,go,Random,Go,我试图生成一个随机数,一个最小值和一个最大值, 但我似乎对这件事迷茫了,怎么了 package main import ( "crypto/rand" "encoding/binary" "fmt" ) func genRandNum(min, max int8) int { var num int8 binary.Read(rand.Reader, binary.LittleEndian, &num) return int(num*(
package main
import (
"crypto/rand"
"encoding/binary"
"fmt"
)
func genRandNum(min, max int8) int {
var num int8
binary.Read(rand.Reader, binary.LittleEndian, &num)
return int(num*(max-min)+min)
}
func main() {
// trying to get a random number beetwen -10 and 10
fmt.Println(genRandNum(-10,10))
}
这个怎么样
func main() {
fmt.Println(genRandNum(-10, 10))
}
func genRandNum(min, max int64) int64 {
// calculate the max we will be using
bg := big.NewInt(max - min)
// get big.Int between 0 and bg
// in this case 0 to 20
n, err := rand.Int(rand.Reader, bg)
if err != nil {
panic(err)
}
// add n to min to support the passed in range
return n.Int64() + min
}
Go@Jzala我在代码中添加了一些注释。你明白了吗?我想这里有个错误。rand.Intrand.Reader,bg将生成介于0和bg-1之间的数字,因此getRandNum永远不会返回10。您可以使用bg:=big.NewIntmax-min+1@siritinga,你是对的,但只有在你想包含上限的情况下。即使你采用了你的方法,在大多数情况下,它也会使较低的值稍微频繁一些。jmaloney使用的rand.Int函数是正确的方法;这就是它的用途。看看他们是如何解决的。