Go语言基础之rand(随机数)包
生活随笔
收集整理的這篇文章主要介紹了
Go语言基础之rand(随机数)包
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在Golang中,有兩個包提供了rand,分別為 "math/rand" 和 "crypto/rand", 對應兩種應用場景。
"math/rand"包實現(xiàn)了偽隨機數生成器。也就是生成 整形和浮點型。
該包中根據生成偽隨機數是是否有種子(可以理解為初始化偽隨機數),可以分為兩類:
1、有種子。通常以時鐘,輸入輸出等特殊節(jié)點作為參數,初始化。該類型生成的隨機數相比無種子時重復概率較低。
2、無種子。可以理解為此時種子為1, Seek(1)。 // 如果無種子編譯后運行的結果是定值
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
for i := 0; i < 10; i++ {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
fmt.Printf("%d ", r.Int31())
}
fmt.Println("")
for i := 0; i < 10; i++ {
fmt.Printf("%d ", rand.Int31())
}
}
// 輸出
490307279 1883158150 444844955 1515267566 332588293 405951414 174061166 311302046 1235903925 2086504713
1298498081 2019727887 1427131847 939984059 911902081 1474941318 140954425 336122540 208240456 646203300
常用的方法有:(以有種子的為例,無種子的直接通過 rand 報名調用對應的方法)
1> 按類型隨機類:
func (r *Rand) Int() int func (r *Rand) Int31() int32 func (r *Rand) Int63() int64 func (r *Rand) Uint32() uint32 func (r *Rand) Float32() float32 // 返回一個取值范圍在[0.0, 1.0)的偽隨機float32值 func (r *Rand) Float64() float64 // 返回一個取值范圍在[0.0, 1.0)的偽隨機float64值
2>指定隨機范圍類:
func (r *Rand) Intn(n int) int func (r *Rand) Int31n(n int32) int32 func (r *Rand) Int63n(n int64) int64
拓展:對于需要隨機指定位數的,當位數不夠是,可以通過前邊補0達到長度一致,如:
package main
import (
"fmt"
"math/rand"
)
func main() {
// 隨機產生4位長度偽隨機數
for i := 0; i < 10; i++ {
fmt.Printf("%.4d ", rand.Int31()%10000)
}
}
// 輸出 8081 7887 1847 4059 2081 1318 4425 2540 0456 3300
”crypto/rand“ 包實現(xiàn)了用于加解密的更安全的隨機數生成器。
該包中常用的是func Read(b []byte) (n int, err error)這個方法, 將隨機的byte值填充到b 數組中,以供b使用。示例如下
package main
import (
"crypto/rand"
"fmt"
)
func main() {
b := make([]byte, 20)
fmt.Println(b) //
_, err := rand.Read(b)
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(b)
}
// 輸出
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[148 86 239 131 106 181 189 38 149 255 35 121 215 135 150 158 67 39 167 107]
Songzhibin
總結
以上是生活随笔為你收集整理的Go语言基础之rand(随机数)包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: F#基础教程 列表
- 下一篇: 安装 SQL Server 客户端驱动程