Leser wie Sie helfen, MUO zu unterstützen. Wenn Sie über Links auf unserer Website einen Kauf tätigen, erhalten wir möglicherweise eine Affiliate-Provision. Weiterlesen.

Die Generierung von Zufallszahlen ist für viele Aufgaben wichtig. Dazu gehören Spieleentwicklung, Kryptografie und Datenanalyse. Zufallswerte ermöglichen unterschiedliche Ergebnisse mit einem Element der Variabilität und Unvorhersehbarkeit.

Go bietet zwei Pakete zum Generieren von Zufallswerten in der Standardbibliothek an: Mathe/Rand Und krypto/rand. Der Mathe/Rand Paket ist hauptsächlich für mathematische Operationen. Der krypto/rand Paket verarbeitet kryptografisch sichere Operationen.

Die Randpakete

Der Mathe/Rand Paket bietet eine flexible Methode für Zufallszahlen erzeugen. Es implementiert eine Vielzahl von Pseudozufallszahlengenerierungen. Das Paket kann eine Zufallszahl mit unterschiedlichen Verteilungen generieren und Seeds verwenden, um die Zufallsfolge zu steuern. Es kann auch Zufallszahlen gleichzeitig oder parallel generieren.

instagram viewer

Der krypto/rand -Paket implementiert einen kryptografisch sicheren Zufallszahlengenerator. Es enthält Funktionen zum Generieren zufälliger Primzahlen mit hoher Wahrscheinlichkeit.

Da diese Pakete denselben Namen haben, müssen Sie Aliase verwenden, wenn Sie beide in einem einzigen Programm verwenden möchten, zum Beispiel:

importieren (
Kranz "Krypto/Rand"
Herr und "Mathematik / Rand"
)

Generieren zufälliger Ganzzahlen in Go

Du kannst den... benutzen Mathe/RandIntern Funktion zum Generieren von Zufallszahlen in einem Bereich.

importieren (
"fmt"
"Mathematik / Rand"
"Zeit"
)

Funkhauptsächlich() {
Rand. Samen (Zeit. Jetzt().UnixNano())

// Intn generiert eine zufällige Ganzzahl zwischen 0 und 100
// (ohne 100)
randomInt := rand. Intern(100)

fmt. Println (randomInt)
}

Dieser Code übergibt die aktuelle Zeit an die Samen Funktion. Es initialisiert den Standard-Zufallszahlengenerator für Pseudozufälligkeit.

Der Intern Die Funktion des rand-Pakets generiert eine Zufallszahl zwischen einem bestimmten Bereich, in diesem Fall 0 bis 100.

Generieren Sie zufällige Gleitkommazahlen

Mit können Sie zufällige Fließkommazahlen erzeugen Schwimmer32 Und Float64 Funktionen. Sie geben 32-Bit- bzw. 64-Bit-Gleitkommazahlen zurück.

So können Sie in Go zufällige 64-Bit-Gleitkommazahlen generieren.

importieren (
"fmt"
"Mathematik / Rand"
"Zeit"
)

Funkhauptsächlich() {
Rand. Samen (Zeit. Jetzt().UnixNano())

// einen zufälligen Float64 zwischen 0,0 und 1,0 generieren
randomFloat := rand. Float64()

fmt. Println (randomFloat)
}

Der Vorgang zum Generieren von 32-Bit-Gleitkommazahlen ist derselbe wie zum Generieren zufälliger 64-Bit-Gleitkommazahlen.

Generieren kryptografisch sicherer Zufallszahlen in Go

Du kannst den... benutzen Int Funktion der krypto/rand Paket, um eine kryptografisch sichere Zufallszahl zu generieren. Der Int Die Funktion nimmt eine Leserinstanz und eine maximale Anzahl für das Limit an.

importieren (
"Krypto/Rand"
"fmt"
"Mathe/groß"
)

Funkhauptsächlich() {
// Erstellen Sie eine große. Int mit dem Maximalwert für den gewünschten Bereich
max := groß. NewInt(100000000)

// Erzeuge eine zufällige Größe. Int
// Das erste Argument ist ein Reader, der Zufallszahlen zurückgibt
// Das zweite Argument ist der Maximalwert (nicht inklusive)
randInt, err := rand. Int (rand. Leser, max.)

Wenn äh != Null {
fmt. Println("Fehler beim Generieren der Zufallszahl:", irren)
zurückkehren
}

fmt. Println("Zufallszahl:", randInt)
}

Der max Variable definiert den maximalen Wert für die Zufallszahl mit der NeuInt Funktion der Mathe / groß Paket. Der Int Die Funktion gibt die zufällige Ganzzahl und einen Fehler für die Behandlung zurück.

Generieren kryptografisch sicherer Zufallswerte

Der krypto/rand -Paket bietet keine integrierten Funktionen zum Generieren kryptografisch sicher zufällige Zeichenfolgen. Sie können dies jedoch mit dem umgehen Lesen Funktion.

importieren (
"Krypto/Rand"
"fmt"
)

FunkcryptoRandom(StringChars Schnur, valueLength int32)Schnur {
bytesSlice := machen([]Byte, valueLength)
_, äh := Rand. Lesen (bytesSlice)

Wenn äh != Null {
zurückkehren"Beim Lesen des Byte-Slice ist ein Fehler aufgetreten"
}

für Pos, Wert := Bereich bytesSlice {
randomisieren := wert % Byte(len(StringChars))
bytesSlice[pos] = stringChars[randomize]
}

zurückkehrenSchnur(byteSlice)
}

Funkhauptsächlich() {
fmt. Println (cryptoRandom("Pneumonoultram" +
"Mikroskopische Silikovulkanokoniose", 10))
}

Der cryptoRandom Die obige Funktion nimmt eine Zeichenfolge auf, um daraus eine zufällige Zeichenfolge zu generieren. Es nimmt auch eine Länge – eine 32-Bit-Ganzzahl – und gibt einen String zurück.

Im cryptoRandom Funktion, die bytesSlice Variable ist ein Stück der erforderlichen Zeichenfolgenlänge. Die For-Range-Schleife durchläuft den Byte-Slice und gibt den Modulus der Elemente des Slice und die Länge der Zeichenfolge in Bytes zurück und ruft ihn ab. Es aktualisiert den Index des Byte-Slice mit dem Modulo-Wert-Index der Zeichenfolge.

Endlich, das cryptoRandom Die Funktion gibt das Zeichenfolgenformat des Byte-Slice zurück.

Sie können UUIDs mit Go generieren

Das Generieren von Zufallswerten ist für eine Vielzahl von Anwendungsfällen praktisch. Wenn Sie viele zufällige, eindeutige Werte benötigen, können Sie UUIDs verwenden.

UUIDs (Universally Unique Identifiers) stellen die weltweite Eindeutigkeit von Identifikatoren sicher. Sie können sie verwenden, um systemübergreifend zwischen Ressourcen zu unterscheiden und gleichzeitig Namenskonflikte zu vermeiden.

Es gibt viele Pakete, die Sie verwenden können, um UUIDs in Go zu generieren. Sie können das os-Paket verwenden, um die uuid aufzurufen Befehl auf Ihrem Betriebssystem, greifen Sie auf das UUID-Paket von Google zurück oder verwenden Sie das gouuid-Paket zum Generieren UUIDs.