Czytelnicy tacy jak ty pomagają wspierać MUO. Kiedy dokonujesz zakupu za pomocą linków na naszej stronie, możemy otrzymać prowizję partnerską. Czytaj więcej.

Generowanie liczb losowych jest ważne dla wielu zadań. Obejmują one tworzenie gier, kryptografię i analizę danych. Losowe wartości pozwalają na różne wyniki z elementem zmienności i nieprzewidywalności.

Go udostępnia dwa pakiety do generowania losowych wartości w bibliotece standardowej: matematyka/rand I krypto/rand. The matematyka/rand pakiet jest przeznaczony głównie do operacji matematycznych. The krypto/rand pakiet obsługuje operacje zabezpieczone kryptograficznie.

Pakiety Rand

The matematyka/rand pakiet zapewnia elastyczną metodę dla generowanie liczb losowych. Implementuje różne generacje liczb pseudolosowych. Pakiet może generować losową liczbę z różnymi rozkładami i używać nasion do kontrolowania losowej sekwencji. Może również generować liczby losowe jednocześnie lub równolegle.

The krypto/rand pakiet implementuje kryptograficznie bezpieczny generator liczb losowych. Zawiera funkcjonalność generowania losowych liczb pierwszych z dużym prawdopodobieństwem.

instagram viewer

Ponieważ te pakiety mają tę samą nazwę, będziesz musiał użyć aliasów, jeśli chcesz użyć obu w jednym programie, na przykład:

import (
kran „krypto/rand”
Pan i „matematyka/rand”
)

Generowanie losowych liczb całkowitych w Go

Możesz użyć matematyka/randZajazd funkcja do generowania liczb losowych w zakresie.

import (
"fmt"
„matematyka/rand”
"czas"
)

funkcjagłówny() {
skraj. Nasienie (czas. Now().UnixNano())

// Intn generuje losową liczbę całkowitą z przedziału od 0 do 100
// (bez 100)
randomInt := Rand. Zajazd(100)

fmt. Println (randomInt)
}

Ten kod przekazuje bieżący czas do Nasionko funkcjonować. Inicjuje domyślny generator liczb losowych dla pseudolosowości.

The Zajazd Funkcja pakietu rand generuje liczbę losową z określonego zakresu, w tym przypadku od 0 do 100.

Generuj losowe liczby zmiennoprzecinkowe

Możesz generować losowe liczby zmiennoprzecinkowe za pomocą Pływak32 I Pływak64 Funkcje. Zwracają odpowiednio 32-bitowe i 64-bitowe liczby zmiennoprzecinkowe.

Oto jak możesz generować losowe 64-bitowe liczby zmiennoprzecinkowe w Go.

import (
"fmt"
„matematyka/rand”
"czas"
)

funkcjagłówny() {
skraj. Nasienie (czas. Now().UnixNano())

// wygeneruj losową liczbę float64 między 0.0 a 1.0
losowyFloat := rand. Liczba zmiennoprzecinkowa64()

fmt. Println (randomFloat)
}

Proces generowania 32-bitowych liczb zmiennoprzecinkowych jest taki sam, jak generowanie losowych 64-bitowych liczb zmiennoprzecinkowych.

Generowanie kryptograficznie bezpiecznych liczb losowych w Go

Możesz użyć Int funkcja krypto/rand pakiet do generowania bezpiecznej kryptograficznie liczby losowej. The Int funkcja przyjmuje instancję czytnika i maksymalną liczbę dla limitu.

import (
„krypto/rand”
"fmt"
„matematyka / duży”
)

funkcjagłówny() {
// Utwórz duży. Int z maksymalną wartością dla żądanego zakresu
maks := duży. NewInt(100000000)

// Wygeneruj losowy big. Int
// Pierwszym argumentem jest czytnik, który zwraca liczby losowe
// Drugi argument jest wartością maksymalną (nie włącznie)
randInt, błąd := rand. Int (rand. Czytelnik, maks.)

Jeśli błąd!= zero {
fmt. println(„Błąd podczas generowania losowej liczby:”, błąd)
powrót
}

fmt. println("Liczba losowa:"randInt)
}

The maks zmienna definiuje maksymalną wartość dla liczby losowej za pomocą NowyInt funkcja matematyka/duży pakiet. The Int funkcja zwraca losową liczbę całkowitą i błąd obsługi.

Generowanie bezpiecznych kryptograficznie losowych wartości

The krypto/rand package nie zapewnia wbudowanej funkcji do generowania zabezpieczone kryptograficznie losowe ciągi. Mimo to możesz obejść ten problem za pomocą Czytać funkcjonować.

import (
„krypto/rand”
"fmt"
)

funkcjakryptoLosowe(stringChars strunowy, wartośćDługość int32)strunowy {
bytesSlice := robić([]bajt, wartośćDługość)
_, błąd := rand. Odczyt (bytesSlice)

Jeśli błąd!= zero {
powrót„Wystąpił błąd podczas odczytu fragmentu bajtu”
}

Do pozycja, wartość := zakres bytesSlice {
randomizuj := wartość % bajt(Len(stringChars))
bytesSlice[pos] = stringChars[randomize]
}

powrótstrunowy(bytesSlice)
}

funkcjagłówny() {
fmt. Println (cryptoRandom(„Pneumonoultram” +
„ikroskopijna krzemowowolkanoconioza”, 10))
}

The kryptoLosowe powyższa funkcja pobiera ciąg, z którego ma zostać wygenerowany losowy ciąg. Przyjmuje również długość — 32-bitową liczbę całkowitą — i zwraca łańcuch.

w kryptoLosowe funkcja, tzw bytesSlice zmienna to wycinek wymaganej długości łańcucha. Pętla for-range przechodzi przez wycinek bajtów i zwraca oraz pobiera moduł elementów wycinka oraz długość łańcucha w bajtach. Aktualizuje indeks wycinka bajtu o indeks wartości modulo łańcucha.

Wreszcie, kryptoLosowe funkcja zwraca format łańcuchowy wycinka bajtów.

Możesz generować identyfikatory UUID za pomocą Go

Generowanie losowych wartości jest przydatne w wielu przypadkach użycia. Jeśli potrzebujesz wielu losowych, unikalnych wartości, możesz użyć identyfikatorów UUID.

Identyfikatory UUID (Universally Unique Identifiers) zapewniają globalną unikalność identyfikatorów. Można ich używać do rozróżniania zasobów w różnych systemach, unikając przy tym konfliktów nazw.

Istnieje wiele pakietów, których można użyć do wygenerowania identyfikatorów UUID w Go. Możesz użyć pakietu os, aby wywołać uuid polecenie w systemie operacyjnym, skorzystaj z pakietu Google UUID lub użyj pakietu gouuid do wygenerowania identyfikatory UUID.