Golang 如何获得Uint64类型的随机数
在Golang中,我们可以使用标准库中的math/rand包来生成一个随机数。但是,由于生成的随机数类型为int64或float64,无法直接转换为Uint64类型,所以我们需要进行一定的处理。
使用math/rand包生成随机数
下面是生成int64类型随机数的示例代码:
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
n := rand.Int63()
fmt.Println(n)
}
可以看到,我们需要使用rand.Seed()
函数来设置种子,否则每次生成的随机数都将是相同的。在本示例中,我们使用time.Now().UnixNano()函数获取当前时间戳的纳秒数作为种子。
转换为Uint64类型
我们可以使用位运算将int64类型的随机数转换为Uint64类型:
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
n := uint64(rand.Int63()) << 1 >> 1
fmt.Println(n)
}
这里使用了位移操作符,首先将int64类型的随机数左移1位,去掉符号位,再右移1位,将剩余的63位转换为Uint64类型。
完整示例代码
下面是完整的示例代码:
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
n := uint64(rand.Int63()) << 1 >> 1
fmt.Println(n)
}
结论
通过上述示例代码,我们可以在Golang中获得Uint64类型的随机数,并且不会超出范围。同时,我们也可以根据需要进行其他类型的随机数生成,具体可见官方文档。