golang 随机产生64位整数
时间: 2023-07-26 19:23:19 浏览: 51
在 Golang 中,可以使用 `math/rand` 和 `crypto/rand` 两个包来生成随机数。其中,`math/rand` 包生成的随机数并不是真正的随机数,而是伪随机数,因此不能用于加密等安全场合;而 `crypto/rand` 包生成的随机数是真正的随机数,可以用于安全场合。下面分别介绍两种包的用法。
使用 `math/rand` 包生成随机数:
```go
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
num := rand.Int63()
fmt.Println(num)
}
```
`Int63()` 函数会生成一个 63 位的伪随机数。如果需要生成 64 位的随机数,可以使用 `Int63()` 函数生成两个 63 位的随机数,然后将它们拼接起来得到一个 64 位的随机数。例如:
```go
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
num := (rand.Int63() << 1) | rand.Int63n(2)
fmt.Println(num)
}
```
`Int63n()` 函数会生成一个小于 n 的伪随机数。
使用 `crypto/rand` 包生成随机数:
```go
package main
import (
"crypto/rand"
"encoding/binary"
"fmt"
)
func main() {
var num int64
binary.Read(rand.Reader, binary.BigEndian, &num)
fmt.Println(num)
}
```
`rand.Reader` 是一个全局变量,是一个 io.Reader 接口,可以用于读取随机字节序列。`binary.Read()` 函数可以将字节序列解析成指定类型的值。这里使用了 `binary.BigEndian` 模式,表示使用大端字节序解析字节序列。