1、math/rand 包
1.1、math/rand 包實現了偽隨機數生成器
1.2、主要方法
(1)func Seed(seed int64)
設置隨機種子,不設置則默認Seed(1)
(2)func Int() int
返回一個非負的偽隨機int值
(3)func Int31() int32
返回一個int32類型的非負的31位偽隨機數
(4)func Int63() int64
返回一個int64類型的非負的63位偽隨機數
(5)func Intn(n int) int
返回一個取值范圍在[0,n)的偽隨機int值,如果n<=0會panic
(6)func Int31n(n int32) int32
返回一個取值范圍在[0,n)的偽隨機int32值,如果n<=0會panic
(7)func Int63n(n int64) int64
返回一個取值范圍在[0, n)的偽隨機int64值,如果n<=0會panic
(8)func Float32() float32
返回一個取值范圍在[0.0, 1.0)的偽隨機float32值
(9)func Float64() float64
返回一個取值范圍在[0.0, 1.0)的偽隨機float64值
(10)func Perm(n int) []int
返回一個有n個元素的,[0,n)范圍內整數的偽隨機排列的切片
1.3、代碼示例
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
//不設置隨機種子,每次運行結果都一樣
fmt.Println(rand.Intn(10))
fmt.Println(rand.Float64())
//設置隨機種子
rand.Seed(time.Now().UnixNano())
fmt.Println(rand.Intn(10))
fmt.Println(rand.Float64())
//隨機數切片
fmt.Println(rand.Perm(5))
//輸出
// 1
// 0.9405090880450124
// 6
// 0.29007018033257015
// [3 4 0 1 2]
}
1.4、應用場景
(1)驗證碼
(2)隨機密碼
(3)抽獎
(4)隨機算法
2、crypto/rand 包
2.1、crypto/rand 包實現了用於加解密的更安全的隨機數生成器
2.2、主要方法
(1)func Int(rand io.Reader, max *big.Int) (n *big.Int, err error)
返回一個在[0, max)區間服從均勻分布的隨機值,如果max<=0則會panic
(2)func Prime(rand io.Reader, bits int) (p *big.Int, err error)
返回一個具有指定字位數(二進制的位數)的數字,該數字具有很高可能性是質數。如果從rand讀取時出錯,或者bits<2會返回錯誤
(3)func Read(b []byte) (n int, err error)
本函數是一個使用io.ReadFull調用Reader.Read的輔助性函數。當且僅當err == nil時,返回值n == len(b)
2.3、代碼示例
package main
import (
"crypto/rand"
"encoding/base64"
"fmt"
"math/big"
)
func main() {
//1、Int
n, err := rand.Int(rand.Reader, big.NewInt(128))
if err == nil {
fmt.Println("rand.Int:", n, n.BitLen())
}
//2、Prime
p, err := rand.Prime(rand.Reader, 5)
if err == nil {
fmt.Println("rand.Prime:", p)
}
//3、Read
b := make([]byte, 32)
m, err := rand.Read(b)
if err == nil {
fmt.Println("rand.Read:", b[:m])
fmt.Println("rand.Read:", base64.URLEncoding.EncodeToString(b))
}
// rand.Int: 92 7
// rand.Prime: 29
// rand.Read: [207 47 241 208 190 84 109 134 86 106 87 223 111 113 203 155 44 118 71 20 186 62 66 130 244 98 97 184 8 179 6 230]
// rand.Read: zy_x0L5UbYZWalffb3HLmyx2RxS6PkKC9GJhuAizBuY=
}
2.4、應用場景
(1)生成隨機加密串
