📅  最后修改于: 2023-12-03 15:31:01.520000             🧑  作者: Mango
Go 语言中的 rand
包提供了伪随机数生成器,可用于生成随机数、打乱数组等应用。本文将介绍该包的使用。
生成随机数可以使用 rand 包的 Intn(n int) int
函数,该函数返回一个范围在 [0, n) 的伪随机数。
示例代码:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano()) // 设置随机数种子
fmt.Println(rand.Intn(100)) // 生成一个 0~99 的随机数
}
打乱数组可以使用 rand 包的 Shuffle(n int, swap func(i, j int))
函数,该函数接受一个数组长度 n
和一个交换元素的函数 swap
,将数组随机打乱。
示例代码:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano()) // 设置随机数种子
arr := []int{1, 2, 3, 4, 5}
rand.Shuffle(len(arr), func(i, j int) {
arr[i], arr[j] = arr[j], arr[i] // 交换 i、j 元素
})
fmt.Println(arr) // [5 2 1 4 3],输出打乱后的数组
}
随机生成数字可以使用 rand 包的 Int()
函数,该函数返回一个 int 类型的伪随机数。还可以使用 Int63()
, Uint32()
, Uint64()
等函数生成不同类型的随机数。
示例代码:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano()) // 设置随机数种子
fmt.Println(rand.Int()) // 输出一个 int 类型的随机数
}
随机生成字母可以先生成随机数,再将其转换成 ASCII 码对应的字母。也可以使用 rand 包的 Read()
函数生成字节数组,再将其转换成字符串。
示例代码:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano()) // 设置随机数种子
for i := 0; i < 10; i++ {
c := 'a' + rand.Intn(26) // 生成 a~z 范围内的随机字母
fmt.Printf("%c ", c) // 输出字母
}
fmt.Println()
b := make([]byte, 10)
rand.Read(b) // 生成 10 个随机字节
fmt.Println(string(b)) // 将字节数组转换为字符串
}
通常情况下,每次程序运行都会生成不同的伪随机数序列。如果需要让多次运行程序生成相同的伪随机数序列,可以设置随机数种子。
设置随机数种子可以使用 rand 包的 Seed(seed int64)
函数,该函数接受一个 int64 类型的参数,将其作为种子生成随机数。
示例代码:
package main
import (
"fmt"
"math/rand"
)
func main() {
rand.Seed(42) // 设置随机数种子,相同的种子生成相同的伪随机数序列
for i := 0; i < 10; i++ {
fmt.Println(rand.Intn(100))
}
}
以上就是 rand 包的使用介绍,更多内容请参考官方文档。