日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Go语言基础之rand(随机数)包

發(fā)布時間:2023/12/19 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 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(随机数)包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。