Heim Backend-Entwicklung Golang So generieren Sie sich nicht wiederholende Zufallszahlen in Golang

So generieren Sie sich nicht wiederholende Zufallszahlen in Golang

Dec 23, 2019 am 10:46 AM
随机数

So generieren Sie sich nicht wiederholende Zufallszahlen in Golang

Das Mathe/Rand-Paket von Go bietet eine API zum Generieren von Zufallszahlen. Die wichtigen APIs sind wie folgt:

// 该函数设置随机种子
// 若不调用此函数设置随机种子,则默认的种子值为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
Nach dem Login kopieren

Beim Generieren von Zufallszahlen verwenden Sie am besten die Aktuelle Zeit als Zufallsstartwert. Sie können das Zeitpaket verwenden, um die aktuelle Zeit zu generieren:

// 返回当前时间
func Now() Time

// 为了将Time类型转换为int64类型以作为随机种子
// 可以使用如下两个函数:

// 返回从1970年1月1日到t的秒数
func (t Time) Unix() int64
// 返回从1970年1月1日到t的纳秒数
func (t Time) UnixNano() int64
Nach dem Login kopieren

Zum Beispiel

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)的随机值
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo generieren Sie sich nicht wiederholende Zufallszahlen in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So erstellen Sie einen Zufallszahlengenerator in Excel So erstellen Sie einen Zufallszahlengenerator in Excel Apr 14, 2023 am 09:46 AM

So erstellen Sie einen Zufallszahlengenerator in Excel

Methode zur Leistungsoptimierung der Java-Zufallszahlengenerierung Methode zur Leistungsoptimierung der Java-Zufallszahlengenerierung Jun 30, 2023 pm 12:25 PM

Methode zur Leistungsoptimierung der Java-Zufallszahlengenerierung

Vertiefte Kenntnisse der Methoden und Anwendungen zur Zufallszahlengenerierung in Numpy Vertiefte Kenntnisse der Methoden und Anwendungen zur Zufallszahlengenerierung in Numpy Jan 03, 2024 am 08:23 AM

Vertiefte Kenntnisse der Methoden und Anwendungen zur Zufallszahlengenerierung in Numpy

Generieren Sie Zufallszahlen mit der Funktion crypto/rand.Read aus der Go-Sprachdokumentation Generieren Sie Zufallszahlen mit der Funktion crypto/rand.Read aus der Go-Sprachdokumentation Nov 04, 2023 pm 03:39 PM

Generieren Sie Zufallszahlen mit der Funktion crypto/rand.Read aus der Go-Sprachdokumentation

So generieren Sie Zufallszahlen und Verifizierungscodes mithilfe von PHP-Arrays So generieren Sie Zufallszahlen und Verifizierungscodes mithilfe von PHP-Arrays Jul 16, 2023 am 08:31 AM

So generieren Sie Zufallszahlen und Verifizierungscodes mithilfe von PHP-Arrays

Wie generiert man Zufallszahlen in der Golang-Lambda-Funktion? Wie generiert man Zufallszahlen in der Golang-Lambda-Funktion? Jun 05, 2024 pm 12:22 PM

Wie generiert man Zufallszahlen in der Golang-Lambda-Funktion?

Wie vermeide ich die Generierung doppelter Zufallszahlen in Golang? Wie vermeide ich die Generierung doppelter Zufallszahlen in Golang? Jun 01, 2024 pm 04:46 PM

Wie vermeide ich die Generierung doppelter Zufallszahlen in Golang?

Generieren Sie Zufallszahlen mit der Java-Funktion Math.random() Generieren Sie Zufallszahlen mit der Java-Funktion Math.random() Jul 24, 2023 am 08:45 AM

Generieren Sie Zufallszahlen mit der Java-Funktion Math.random()

See all articles