詳解Go語(yǔ)言中rand(隨機(jī)數(shù))包的使用
包"math/rand"
隨機(jī)數(shù)生成器,可以生成 整型或浮點(diǎn)型 的偽隨機(jī)數(shù)。
隨機(jī)數(shù)種子
不同的種子生成不同的隨機(jī)數(shù),無(wú)種子編譯后運(yùn)行的結(jié)果是定值。
通常以時(shí)鐘作為參數(shù)初始化,rand.Seed(time.Now().UnixNano())。
隨機(jī)函數(shù)
rand.Int()
返回一個(gè)隨機(jī)整數(shù)
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
nums := make([]int, 3)
rand.Seed(time.Now().UnixNano())
for j := 0; j < 10; j++ {
for i := 0; i < 3; i++ {
nums[i] = rand.Int()
fmt.Print(nums[i])
fmt.Print("\t")
}
fmt.Println()
}
}
輸出樣例:
8547983782177664082 3052552994446827557 8765581018699603124
5361649810688880538 7247555699230090626 6921521756094709862
7061225496098313961 4043787731930393944 4881510333544611431
2742623498123161832 8826061491064266771 7540769746514898360
1640562288017497602 7737908637884326151 927535944994878966
7393177581525888978 6511469144479537097 5004275440415177087
88816382525065439 4249346871495670764 8192005441386526629
5523554829668683712 69312977258692669 6584352354533757392
3124007232705319196 5635727296343069158 4284023996891098234
3861142140259007378 4879978992907007455 473741157600402359
rand.Intn(n)
返回0~n間不包括n的非負(fù)整數(shù)
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
nums := make([]int, 8)
rand.Seed(time.Now().UnixNano())
for j := 0; j < 10; j++ {
for i := 0; i < 8; i++ {
nums[i] = rand.Intn(100)
fmt.Print(nums[i])
fmt.Print("\t")
輸出樣例:
40 63 3 47 76 78 21 44
43 40 12 87 94 90 97 68
0 47 14 71 42 52 20 72
86 57 78 65 53 77 75 70
76 26 63 40 57 75 77 82
86 4 46 25 2 67 46 0
53 64 70 37 59 41 47 63
80 3 85 42 1 47 31 7
2 6 2 40 33 49 30 32
68 90 74 51 40 57 92 97
注: rand.Intn(100) 與 rand.Int()%100 效果相近。
實(shí)例
紅球 1-33 選擇6個(gè) 不能重復(fù);藍(lán)球 1-16 選擇1個(gè);藍(lán)球和紅球可以重復(fù)
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
red := make([]int, 6)
rand.Seed(time.Now().UnixNano())
for i := 0; i < len(red); i++ {
t := rand.Intn(33) + 1
for j := 0; j < i; j++ {
if t == red[j] {
t = rand.Intn(33) + 1
j--
}
}
red[i] = t
}
fmt.Println("紅球:", red, "\n藍(lán)球:", rand.Intn(16)+1)
}
輸出:
紅球: [25 28 19 26 33 14]
藍(lán)球: 7
其他隨機(jī)函數(shù)
按類型隨機(jī)類
func (r *Rand) Int31() int32 func (r *Rand) Int63() int64 func (r *Rand) Uint32() uint32 func (r *Rand) Float32() float32 // 返回一個(gè)取值范圍在[0.0, 1.0)的偽隨機(jī)float32值 func (r *Rand) Float64() float64 // 返回一個(gè)取值范圍在[0.0, 1.0)的偽隨機(jī)float64值
指定隨機(jī)范圍類
func (r *Rand) Int31n(n int32) int32 func (r *Rand) Int63n(n int64) int64
偽隨機(jī)排列的切片
返回一個(gè)有n個(gè)元素的,[0,n)范圍內(nèi)整數(shù)的偽隨機(jī)排列的切片
fmt.Println(rand.Perm(10)) // [3 7 0 1 9 2 4 5 6 8]
生成標(biāo)準(zhǔn)正態(tài)分布
返回一個(gè)服從標(biāo)準(zhǔn)正態(tài)分布(標(biāo)準(zhǔn)差=1,期望=0)
取值范圍在[-math.MaxFloat64, +math.MaxFloat64]的float64值。
fmt.Println(rand.NormFloat64()) //生成不同的正態(tài)分布值 fmt.Println(rand.NormFloat64() * 標(biāo)準(zhǔn)差 + 期望)
生成標(biāo)準(zhǔn)指數(shù)分布
返回一個(gè)服從標(biāo)準(zhǔn)指數(shù)分布(率參數(shù)=1,率參數(shù)是期望的倒數(shù))
取值范圍在(0, +math.MaxFloat64]的float64值。
fmt.Println(rand.ExpFloat64()) //生成不同的指數(shù)分布值 fmt.Println(rand.ExpFloat64() / 率參數(shù))

到此這篇關(guān)于詳解Go語(yǔ)言中rand(隨機(jī)數(shù))包的使用的文章就介紹到這了,更多相關(guān)Go語(yǔ)言 rand包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語(yǔ)言異步API設(shè)計(jì)的扇入扇出模式詳解
這篇文章主要為大家介紹了Go語(yǔ)言異步API設(shè)計(jì)的扇入扇出模式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Go 語(yǔ)言 IDE 中的 VSCode 配置使用教程
Gogland 是 JetBrains 公司推出的Go語(yǔ)言集成開發(fā)環(huán)境。這篇文章主要介紹了Go 語(yǔ)言 IDE 中的 VSCode 配置使用教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
Go Gin框架中的binding驗(yàn)證器使用小結(jié)
Gin框架中的binding驗(yàn)證器為我們提供了簡(jiǎn)便的數(shù)據(jù)綁定和驗(yàn)證功能,通過(guò)合理使用binding和validate標(biāo)簽,我們可以確保API接口的數(shù)據(jù)合法性和完整性,這篇文章主要介紹了Go Gin框架中的binding驗(yàn)證器使用指南,需要的朋友可以參考下2024-07-07
簡(jiǎn)單對(duì)比一下?C語(yǔ)言?與?Go語(yǔ)言
這篇文章主要介紹了簡(jiǎn)單對(duì)比一下?C語(yǔ)言?與?Go語(yǔ)言的相關(guān)資料,需要的朋友可以參考下2023-08-08
Go語(yǔ)言中slice作為參數(shù)傳遞時(shí)遇到的一些“坑”
這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言中slice作為參數(shù)傳遞時(shí)遇到的一些“坑”,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03

