站長資訊網
        最全最豐富的資訊網站

        golang怎么生成不重復隨機數

        golang怎么生成不重復隨機數

        Go的math/rand包提供了生成隨機數的API,重要的API如下:

        // 該函數設置隨機種子 // 若不調用此函數設置隨機種子,則默認的種子值為1,由于隨機算法是固定的, // 如果每次都以1作為隨機種子開始產生隨機數,則結果都是一樣的,因此一般 // 都需要調用此函數來設置隨機種子,通常的做法是以當前時間作為隨機種子 // 以保證每次隨機種子都不同,從而產生的隨機數也不通 // 該函數協程安全 func Seed(seed int64)  // 以下函數用來生成相應數據類型的隨機數,帶n的版本則生成[0,n)的隨機數。 // 注意生成的隨機數都是非負數 func Float32() float32 func Float64() float64 func Int() int func Int31() int32  // 注意該函數只返回int32表示范圍內的非負數,位數為31,因此該函數叫做Int31 func Int31n(n int32) int32 func Int63() int64 func Int63n(n int64) int64 func Intn(n int) int func Uint32() uint32 func Uint64() uint64  // 另外,rand包還提供了一個類,接口和上面的大致相同: type Rand struct {     // ... }  // 創建一個以seed為種子的源,注意該源不是協程安全的 func NewSource(seed int64) Source // 以src為源創建隨機對象 func New(src Source) *Rand // 設置或重置種子,注意該函數不是協程安全的 func (r *Rand) Seed(seed int64) // 下面的函數和全局版本的函數功能一樣 func (r *Rand) Float32() float32 func (r *Rand) Float64() float64 func (r *Rand) Int() int func (r *Rand) Int31() int32 func (r *Rand) Int31n(n int32) int32 func (r *Rand) Int63() int64 func (r *Rand) Int63n(n int64) int64 func (r *Rand) Intn(n int) int func (r *Rand) Uint32() uint32 func (r *Rand) Uint64() uint64

        生成隨機數時,以當前時間作為隨機種子是個很好的選擇,可以用time包生成當前時間:

        // 返回當前時間 func Now() Time  // 為了將Time類型轉換為int64類型以作為隨機種子 // 可以使用如下兩個函數:  // 返回從1970年1月1日到t的秒數 func (t Time) Unix() int64 // 返回從1970年1月1日到t的納秒數 func (t Time) UnixNano() int64

        例如

        package main import (     "fmt"     "math/rand"     "time" ) func main() {     //     // 全局函數     //     rand.Seed(time.Now().Unix())      fmt.Println(rand.Int())       // int隨機值,返回值為int     fmt.Println(rand.Intn(100))   // [0,100)的隨機值,返回值為int     fmt.Println(rand.Int31())     // 31位int隨機值,返回值為int32     fmt.Println(rand.Int31n(100)) // [0,100)的隨機值,返回值為int32     fmt.Println(rand.Float32())   // 32位float隨機值,返回值為float32     fmt.Println(rand.Float64())   // 64位float隨機值,返回值為float64      // 如果要產生負數到正數的隨機值,只需要將生成的隨機數減去相應數值即可     fmt.Println(rand.Intn(100) - 50) // [-50, 50)的隨機值      //     // Rand對象     //     r := rand.New(rand.NewSource(time.Now().Unix()))      fmt.Println(r.Int())       // int隨機值,返回值為int     fmt.Println(r.Intn(100))   // [0,100)的隨機值,返回值為int     fmt.Println(r.Int31())     // 31位int隨機值,返回值為int32     fmt.Println(r.Int31n(100)) // [0,100)的隨機值,返回值為int32     fmt.Println(r.Float32())   // 32位float隨機值,返回值為float32     fmt.Println(r.Float64())   // 64位float隨機值,返回值為float64      // 如果要產生負數到正數的隨機值,只需要將生成的隨機數減去相應數值即可     fmt.Println(r.Intn(100) - 50) // [-50, 50)的隨機值 }

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲国产成人精品女人久久久 | 久久国产精品久久精品国产| 国产午夜亚洲精品理论片不卡| 精品爆乳一区二区三区无码av| 亚洲国产精品综合久久一线 | 精品久久人妻av中文字幕| 精品国产呦系列在线观看免费| 久久精品九九亚洲精品天堂 | 亚洲AV乱码久久精品蜜桃| 国产精品JIZZ在线观看老狼| 国产精品亚洲精品观看不卡| 久久成人国产精品| 中文字幕精品一区二区精品| 久久精品国产亚洲av瑜伽| 国产VA免费精品高清在线| 久久99精品国产99久久| 国产午夜福利精品久久2021| 亚洲日韩精品无码专区网址| 四虎影视永久在线精品免费| 国产精品午夜久久| 91精品国产福利在线观看麻豆| 91精品在线看| 国产精品视频第一区二区三区| 中文无码久久精品| 亚洲国产精品视频| 久久99亚洲综合精品首页 | 国产成人精品免费视频网页大全 | 伊在人亚洲香蕉精品区麻豆| 日本精品一区二区三区在线视频| 久久精品国产一区二区| 国产精品日韩欧美久久综合| 99久久国产热无码精品免费久久久久 | 国产精品视频全国免费观看| 国产精品99久久精品爆乳| 日韩欧美精品不卡| 91精品国产91久久久久久青草| 91久久精品国产免费直播| 成人精品视频成人影院| 国产99视频精品专区| 韩国三级中文字幕hd久久精品| 精品人妻系列无码人妻免费视频|