概念簡介
Go語言的 `math/rand` 包提供了偽隨機數生成器(英)。
例程代碼
package main
import "time"
import "fmt"
import "math/rand"
func main() {
// 例如,`rand.Intn` 返回一個隨機的整數 n,`0 <= n <= 100`。
fmt.Print(rand.Intn(100), ",")
fmt.Print(rand.Intn(100))
fmt.Println()
// `rand.Float64` 返回一個64位浮點數 `f`,
// `0.0 <= f <= 1.0`。
fmt.Println(rand.Float64())
// 這個技巧可以用來生成其他範圍的隨機浮點數,例如
// `5.0 <= f <= 10.0`
fmt.Print((rand.Float64()*5)+5, ",")
fmt.Print((rand.Float64() * 5) + 5)
fmt.Println()
// 默認情況下,給定的種子是確定的,每次都會產生相同的隨機數數字序列。要產生變化的
// 序列,需要給定一個變化的種子。
// 需要注意的是,如果你出於加密目的,需要使用隨機數的話,請使用 `crypto/rand` 包,
// 此方法不夠安全。
s1 := rand.NewSource(time.Now().UnixNano())
r1 := rand.New(s1)
// 調用上麵返回的 `rand.Source` 的函數和調用 `rand` 包中函數
// 是相同的。
fmt.Print(r1.Intn(100), ",")
fmt.Print(r1.Intn(100))
fmt.Println()
// 如果使用相同的種子生成的隨機數生成器,將會產生相同的隨機
// 數序列。
s2 := rand.NewSource(42)
r2 := rand.New(s2)
fmt.Print(r2.Intn(100), ",")
fmt.Print(r2.Intn(100))
fmt.Println()
s3 := rand.NewSource(42)
r3 := rand.New(s3)
fmt.Print(r3.Intn(100), ",")
fmt.Print(r3.Intn(100))
}
執行&輸出
$ go run random-numbers.go
81,87
0.6645600532184904
7.123187485356329,8.434115364335547
0,28
5,87
5,87
參閱 `math/rand`包
文檔,提供了 Go 可以提供的其他隨量的參考信息。
課程導航
學習上一篇:Go語言教程:時間的格式化和解析 學習下一篇:Go語言教程:數字解析
相關資料
本例程github源代碼:https://github.com/xg-wang/gobyexample/tree/master/examples/random-numbers