Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

Generování náhodných čísel je důležité pro mnoho úkolů. Patří mezi ně vývoj her, kryptografie a analýza dat. Náhodné hodnoty umožňují odlišné výsledky s prvkem variability a nepředvídatelnosti.

Go poskytuje dva balíčky pro generování náhodných hodnot ve standardní knihovně: matematika/rand a krypto/rand. The matematika/rand balíček je hlavně pro matematické operace. The krypto/rand balíček zpracovává kryptograficky zabezpečené operace.

Randové balíčky

The matematika/rand balíček poskytuje flexibilní způsob generování náhodných čísel. Implementuje řadu generací pseudonáhodných čísel. Balíček může generovat náhodné číslo s různými distribucemi a používat semena k řízení náhodné sekvence. Může také generovat náhodná čísla souběžně nebo paralelně.

The krypto/rand balíček implementuje kryptograficky bezpečný generátor náhodných čísel. Zahrnuje funkcionalitu pro generování náhodných prvočísel s vysokou pravděpodobností.

instagram viewer

Vzhledem k tomu, že tyto balíčky mají stejný název, budete muset použít aliasy, pokud je chcete používat v jednom programu, například:

import (
crand "crypto/rand"
mrand "math/rand"
)

Generování náhodných celých čísel v Go

Můžete použít matematika/randIntn funkce pro generování náhodných čísel v rozsahu.

import (
"fmt"
"math/rand"
"čas"
)

funchlavní() {
rand. Semeno (čas. Nyní().UnixNano())

// Intn vygeneruje náhodné celé číslo mezi 0 a 100
// (nezahrnuje 100)
randomInt := rand. Intn(100)

fmt. Println (randomInt)
}

Tento kód předá aktuální čas do Semínko funkce. Inicializuje výchozí generátor náhodných čísel pro pseudonáhodnost.

The Intn funkce balíčku rand generuje náhodné číslo mezi zadaným rozsahem, v tomto případě 0 až 100.

Generování náhodných čísel s plovoucí desetinnou čárkou

Můžete generovat náhodná čísla s plovoucí desetinnou čárkou pomocí Float32 a Float64 funkcí. Vracejí 32bitová a 64bitová čísla s plovoucí desetinnou čárkou.

Zde je návod, jak můžete generovat náhodná 64bitová čísla s plovoucí desetinnou čárkou v Go.

import (
"fmt"
"math/rand"
"čas"
)

funchlavní() {
rand. Semeno (čas. Nyní().UnixNano())

// vygeneruje náhodný float64 mezi 0,0 a 1,0
randomFloat := rand. Float64()

fmt. Println (randomFloat)
}

Proces generování 32bitových čísel s pohyblivou řádovou čárkou je stejný jako při generování náhodných 64bitových čísel s pohyblivou řádovou čárkou.

Generování kryptograficky bezpečných náhodných čísel v Go

Můžete použít Int funkce krypto/rand balíček pro vygenerování kryptograficky bezpečného náhodného čísla. The Int funkce přijímá instanci čtečky a maximální počet pro limit.

import (
"crypto/rand"
"fmt"
"matematický/velký"
)

funchlavní() {
// Vytvořte velký. Int s maximální hodnotou pro požadovaný rozsah
max := velký. NewInt(100000000)

// Vygeneruje náhodný velký. Int
// První argument je čtečka, která vrací náhodná čísla
// Druhý argument je maximální hodnota (nevčetně)
randInt, err := rand. Int (rand. Čtenář, max.)

-li chyba!= nula {
fmt. Println("Chyba při generování náhodného čísla:", chyba)
vrátit se
}

fmt. Println("Náhodné číslo:", randInt)
}

The max proměnná definuje maximální hodnotu pro náhodné číslo pomocí NewInt funkce matematika/velký balík. The Int funkce vrací náhodné celé číslo a chybu pro zpracování.

Generování kryptograficky bezpečných náhodných hodnot

The krypto/rand balíček neposkytuje vestavěné funkce pro generování kryptograficky bezpečné náhodné řetězce. Přesto se můžete obejít pomocí Číst funkce.

import (
"crypto/rand"
"fmt"
)

funckryptoNáhodně(stringChars tětiva, hodnotaLength int32)tětiva {
bytesSlice := udělat([]byte, valueLength)
_, chyba := rand. Číst (bytesSlice)

-li chyba!= nula {
vrátit se"Došlo k chybě při čtení z bajtového řezu"
}

pro pos, hodnota := rozsah bytesSlice {
randomize := hodnota % byte(len(stringChars))
bytesSlice[pos] = stringChars[randomize]
}

vrátit setětiva(bytesSlice)
}

funchlavní() {
fmt. Println (cryptoRandom("pneumonoultram" +
"ikroskopická silikovovolkanokonióza", 10))
}

The kryptoNáhodně výše uvedená funkce vezme řetězec, ze kterého vygeneruje náhodný řetězec. Trvá také délku – 32bitové celé číslo – a vrací řetězec.

V kryptoNáhodně funkce, bytesSlice proměnná je výsek požadované délky řetězce. Smyčka for-range prochází bajtovým řezem a vrací a získává modul prvků řezu a délku řetězce v bajtech. Aktualizuje index bajtového řezu indexem hodnoty modulo řetězce.

Konečně, kryptoNáhodně Funkce vrací formát řetězce bajtového řezu.

Můžete generovat UUID s Go

Generování náhodných hodnot se hodí pro širokou škálu případů použití. Pokud potřebujete mnoho náhodných, jedinečných hodnot, můžete použít UUID.

UUID (Universally Unique Identifiers) zajišťují globální jedinečnost identifikátorů. Můžete je použít k rozlišení mezi prostředky napříč systémy a zároveň se vyhnout konfliktům v názvech.

Existuje mnoho balíčků, které můžete použít ke generování UUID v Go. K volání uuid můžete použít balíček os příkaz ve vašem operačním systému, použijte balíček UUID společnosti Google nebo k vygenerování použijte balíček gouuid UUID.