2020/06/11
- 今日記憶一下 Package math/rand 隨機數生成器
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
/**
官方介紹
隨機數由源生成。頂級函式。
例如 Float64和 Int,使用預設的共享 Source,它在每次執行程式時生成確定的值序列。
如果每次執行需要不同的行為,則使用 Seed 函式初始化預設 Source。
預設 Source 對於多個 goroutine 併發使用是安全的,但 NewSource 建立的 Sources 則不是。
*/
//Seed 使用提供的種子值將預設的 Source 初始化為確定性狀態。
//如果不呼叫Seed,生成器的行為就像被Seed(1)播種一樣。種子值在除以2³¹-1時有相同的餘數,會產生相同的偽隨機序列。
// Seed與Rand.Seed方法不同,併發使用是安全的
rand.Seed(time.Now().Unix())
// 非負的 int 隨機值,返回值為int
fmt.Println(rand.Int()) // 8118193344438388970
// [0,100)的隨機值,返回值為int
fmt.Println(rand.Intn(100)) // 58
// 非負的偽隨機31位整數,返回值為 int32
fmt.Println(rand.Int31()) // 1430627247
// [0,10)的隨機值,返回值為 int32 [0,n ]
fmt.Println(rand.Int31n(10)) // 5
// 32位float隨機值,返回值為 float32 [0.0,1.0]
fmt.Println(rand.Float32()) // 0.5671139
// 64位float隨機值,返回值為 float64 [0.0,1.0]
fmt.Println(rand.Float64()) // 0.6571823688532759
// 如果要產生負數到正數的隨機值,只需要將生成的隨機數減去相應數值即可 [-5, 5)的隨機值
fmt.Println(rand.Intn(5) - 5) // 2
// Rand 也可以使用物件的方式
R := rand.New(rand.NewSource(time.Now().Unix()))
// [0,10)的隨機值,返回值為int
fmt.Println(R.Intn(10))
// [0,10)的隨機值,返回值為int32
fmt.Println(R.Int31n(10))
// 32位 float 隨機值,返回值為float32
fmt.Println(R.Float32())
// 64位 float 隨機值,返回值為float64
fmt.Println(R.Float64())
// [-5, 5)的隨機值
fmt.Println(R.Intn(5) - 5)
}
順便佛系一下用 go 做做 leetcode 的練習題同步到了 GitHub 大家也可以看看。
一步一個腳印,穩紮穩打,重新出發!從基本的 Golang Packages 記憶開始,堅持 ing!
本作品採用《CC 協議》,轉載必須註明作者和本文連結