首頁 後端開發 Golang golang怎麼產生不重複隨機數

golang怎麼產生不重複隨機數

Dec 23, 2019 am 10:46 AM
隨機數

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)的随机值
}
登入後複製

以上是golang怎麼產生不重複隨機數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在 Excel 中建立隨機數產生器 如何在 Excel 中建立隨機數產生器 Apr 14, 2023 am 09:46 AM

如何使用 RANDBETWEEN 在 Excel 中產生隨機數字如果要產生特定範圍內的隨機數,RANDBETWEEN 函數是一種快速簡單的方法。這允許您在您選擇的任何兩個值之間產生隨機整數。使用 RANDBETWEEN 在 Excel 中產生隨機數:按一下您希望出現第一個隨機數的儲存格。鍵入=RANDBETWEEN(1,500)將「1」替換為您要產生的最低隨機數,將「500」替換為

Java隨機數產生效能優化方法 Java隨機數產生效能優化方法 Jun 30, 2023 pm 12:25 PM

如何優化Java開發中的隨機數產生效能隨機數在電腦科學上有廣泛的應用,特別是在密碼學、模擬、遊戲等領域。在Java開發中,我們常常需要產生隨機數來滿足各種需求。然而,隨機數產生的效能通常是開發者關注的問題之一。本文將探討如何優化Java開發中的隨機數產生效能。使用ThreadLocalRandom類別在Java7中引入了ThreadLocalRandom類

使用Go語言文件中的crypto/rand.Read函數產生隨機數 使用Go語言文件中的crypto/rand.Read函數產生隨機數 Nov 04, 2023 pm 03:39 PM

使用Go語言產生隨機數Go語言是一種現代化、簡潔和高效的程式語言,提供了許多內建程式庫,可用於產生隨機數。其中,crypto/rand套件提供了一系列函數來產生安全的隨機數。在本文中,我們將透過使用crypto/rand套件中的Read函數來產生隨機數。首先,我們需要匯入crypto/rand包,並建立一個位元組數組來儲存隨機數。程式碼範例如下:packagemain

如何使用PHP數組產生隨機數字和驗證碼 如何使用PHP數組產生隨機數字和驗證碼 Jul 16, 2023 am 08:31 AM

如何使用PHP數組產生隨機數字和驗證碼隨機數和驗證碼在開發網站和應用程式過程中非常常見。 PHP提供了各種方法來產生隨機數字和驗證碼。本文將介紹如何使用PHP數組產生隨機數字和驗證碼,並附帶對應的程式碼範例。一、產生隨機數在PHP中,我們可以使用rand()函數來產生隨機數。 rand()函數需要兩個參數,即最小值和最大值。範例程式碼如下:$min=1;$max=

Java中如何使用Random.nextInt()方法產生隨機數? Java中如何使用Random.nextInt()方法產生隨機數? Nov 18, 2023 pm 03:44 PM

Java中如何使用Random.nextInt()方法產生隨機數?隨機數在電腦科學有廣泛應用,可用於產生密碼、遊戲中的隨機事件、資料科學中的隨機抽樣等。 Java中提供了Random類別來產生隨機數,其中的nextInt()方法可以用來產生一個隨機整數。以下我將介紹如何使用Random.nextInt()方法產生隨機數,並提供具體的程式碼範例。首先,我們需要

如何避免在 Golang 中產生重複的隨機數? 如何避免在 Golang 中產生重複的隨機數? Jun 01, 2024 pm 04:46 PM

在Golang中避免產生重複隨機數的方法:建立一個新的隨機數產生器rand.New(rand.Source)。使用rand.NewSource(time.Now().UnixNano())作為熵源。使用rand.Intn(n)產生隨機整數。

深入了解numpy中的隨機數產生方法和應用 深入了解numpy中的隨機數產生方法和應用 Jan 03, 2024 am 08:23 AM

探索NumPy產生隨機數的方法及應用引言:隨機數在電腦科學和統計學中有著廣泛的應用,例如模擬實驗、資料產生和特徵選擇等。在Python中,NumPy(NumericalPython)庫是一個強大的數值計算庫,提供了許多用於產生隨機數的函數。本文將對NumPy中的隨機數產生方法進行探索,並給出具體的程式碼範例。一、NumPy的隨機數產生函數NumPy提供

在C語言中的隨機密碼產生器 在C語言中的隨機密碼產生器 Sep 03, 2023 pm 05:25 PM

在本文中,我們將深入探討與C程式設計中的字串操作相關的一個有趣且實用的問題。我們將在C語言中建構一個「隨機密碼產生器」。這個問題不僅可以增強您對字串操作的理解,還可以增加您對C標準庫的知識。問題陳述任務是建立一個產生指定長度的隨機密碼的程式。密碼應包含大小寫字母、數字和特殊字元。 C解決方案方法為了解決這個問題,我們將利用C標準函式庫的強大功能。我們將使用rand()函數在指定範圍內產生隨機數。我們將創建一個包含密碼可能包含的所有字符的字串,然後對於密碼中的每個字符,我們將從這個字串中隨機選擇一個

See all articles