Generierung von Zufallszahlen in Go

Sheeraz Gul 20 Juni 2023
  1. Generierung von Zufallszahlen in Go
  2. Generieren Sie Zufallszahlen zwischen einem bestimmten Bereich
  3. Generieren Sie ein Array von Zufallszahlen
  4. Seed vor dem Generieren der Zufallszahlen
  5. Verwenden Sie Rand, um zufällige Zeichenfolgen zu generieren
Generierung von Zufallszahlen in Go

Dieses Tutorial demonstriert die Verwendung der Funktion zur Generierung von Zufallszahlen in GoLang.

Generierung von Zufallszahlen in Go

GoLang bietet integrierte Unterstützung für die Generierung von Zufallszahlen. Das eingebaute Paket math hat die Methode rand(), die zur Generierung von Zufallszahlen verwendet wird.

Die Methode math/rand erzeugt Pseudo-Zufallszahlen. Die Methode rand() kann eine Zufallszahl zwischen dem Intervall von 0 und n erzeugen.

Die Syntax für diese Methode lautet:

RandomNumber := rand.Intn()

Die Methode Intn() gibt den ganzzahligen Wert von n an. Versuchen wir es an einem Beispiel:

package main

import (
    "fmt"
    "math/rand"
)

func main() {

    // Generating numbers between `0 <= n < 100`.
    fmt.Print(rand.Intn(100), "\n")
    fmt.Print(rand.Intn(100), "\n")
    fmt.Print(rand.Intn(100), "\n")
    fmt.Print(rand.Intn(100), "\n")
    fmt.Print(rand.Intn(100))
    fmt.Println()

}

Der obige Code generiert Zufallszahlen zwischen 0 und 100. Siehe die Ausgabe:

81
87
47
59
81

Generieren Sie Zufallszahlen zwischen einem bestimmten Bereich

rand.Intn() generiert eine Zufallszahl zwischen 0 und der angegebenen Zahl, aber was ist, wenn wir eine Zufallszahl zwischen dem angegebenen Bereich erzeugen wollen? Eine ähnliche Methode kann mit einer einfachen mathematischen Operation eine Zufallszahl zwischen einem bestimmten Bereich generieren.

Siehe das Beispiel:

package main

import (
    "fmt"
    "math/rand"
)

func main() {
    minrange := 20
    maxrange := 45
    fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
    fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
    fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
    fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
    fmt.Println(rand.Intn(maxrange-minrange) + minrange)

}

Der obige Code generiert Zufallszahlen zwischen 20 und 45. Siehe die Ausgabe:

26

32

42

29

26

Program exited.

Generieren Sie ein Array von Zufallszahlen

Auf ähnliche Weise können wir mit der Methode rand() ein Array von Zufallszahlen generieren. Wir müssen nur die for-Schleife verwenden, um die Zahlen zu generieren und sie in ein Array zu packen.

Siehe das Beispiel:

package main

import (
    "fmt"
    "math/rand"
)

func RandomArray(ArrayLength int) []int {

    arr := make([]int, ArrayLength)

    for i := 0; i <= ArrayLength-1; i++ {

        arr[i] = rand.Intn(ArrayLength)
    }

    return arr
}

func main() {

    ArrayLength := 15
    fmt.Println(RandomArray(ArrayLength))
}

Der obige Code generiert ein Array von Zufallszahlen mit einer Länge von 15. Siehe die Ausgabe:

[11 12 2 14 1 3 10 5 1 0 14 1 12 14 13]

Program exited.

Seed vor dem Generieren der Zufallszahlen

Die Methode seed() wird verwendet, um anzugeben, wo mit der Generierung der Zufallszahl begonnen werden soll, da die Methode rand() die Zahlen generiert, indem sie eine Operation mit dem vorherigen Wert ausführt.

Dies ist der wichtigste Teil beim Generieren der Zufallszahl, um einen Startwert bereitzustellen, der einer tatsächlichen Zufallszahl nahe kommt. Versuchen wir es an einem Beispiel:

package main

import (
    "fmt"
    "math/rand"
)

func main() {

    rand.Seed(30)
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d \n", rand.Intn(150))

    rand.Seed(30)
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d \n", rand.Intn(150))

    rand.Seed(30)
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d \n", rand.Intn(150))

    fmt.Println()
}

Der obige Code setzt die rand-Methode dreimal mit demselben Wert. Dann generiert der Zufallszahlengenerator jedes Mal dieselbe Zahl, wenn er denselben Startwert findet.

Siehe die Ausgabe:

138 16 41
138 16 41
138 16 41

Program exited.

Verwenden Sie Rand, um zufällige Zeichenfolgen zu generieren

Mit Hilfe von bytes können wir nach der rand-Methode zufällige Strings erzeugen. Wir brauchen auch die Hilfe der Methode, die eine Zahl zwischen einem bestimmten Bereich generiert.

Versuchen wir es an einem Beispiel:

package main

import (
    "fmt"
    "math/rand"
)

func GenerateRandomString(StringLength int) string {

    StringBytes := make([]byte, StringLength)

    for i := 0; i < StringLength; i++ {
        StringBytes[i] = byte(RandNumberinRange(65, 122))
    }

    return string(StringBytes)
}

func RandNumberinRange(minnumber int, maxnumber int) int {

    return minnumber + rand.Intn(maxnumber-minnumber)
}

func main() {
    fmt.Println(GenerateRandomString(25))
}

Der obige Code generiert zufällige Zeichenfolgen mit dem ASCII-Code zwischen 65 und 122, der Großbuchstaben, Kleinbuchstaben und einige Symbole enthält. Es wird eine Zeichenfolge mit einer Länge von 25 generiert.

Siehe die Ausgabe:

FbpXH\fgTAvxtUxCbvLXXVOle

Wir können auch ein zufälliges Zeichen aus der angegebenen Zeichenfolge oder dem angegebenen Element drucken. Sehen wir uns ein Beispiel an:

package main

import (
    "fmt"
    "math/rand"
)

func main() {

    DemoRune := []rune("DELFTSTACK")

    Result := DemoRune[rand.Intn(len(DemoRune))]

    fmt.Println(string(Result))
}

Die Rune ist ein Datentyp, der zum Speichern des Codes verwendet wird, der zur Darstellung der Unicode-Zeichen verwendet wird. Der obige Code gibt ein zufälliges Zeichen aus der angegebenen Zeichenfolge aus.

Siehe die Ausgabe:

E

Program exited.
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook