Generovanie náhodných čísel je dôležité pre mnoho úloh. Patria sem vývoj hier, kryptografia a analýza údajov. Náhodné hodnoty umožňujú odlišné výsledky s prvkom variability a nepredvídateľnosti.
Go poskytuje dva balíky na generovanie náhodných hodnôt v štandardnej knižnici: matematika/rand a krypto/rand. The matematika/rand balík je určený hlavne na matematické operácie. The krypto/rand balík spracováva kryptograficky bezpečné operácie.
Randové balíčky
The matematika/rand balík poskytuje flexibilnú metódu pre generovanie náhodných čísel. Implementuje rôzne generácie pseudonáhodných čísel. Balík môže vygenerovať náhodné číslo s rôznymi distribúciami a použiť semená na kontrolu náhodnej sekvencie. Môže tiež generovať náhodné čísla súbežne alebo paralelne.
The krypto/rand balík implementuje kryptograficky bezpečný generátor náhodných čísel. Obsahuje funkcionalitu na generovanie náhodných prvočísel s vysokou pravdepodobnosťou.
Keďže tieto balíky majú rovnaký názov, budete musieť použiť aliasy, ak ich chcete použiť v jednom programe, napríklad:
importovať (
crand "crypto/rand"
mrand "math/rand"
)
Generovanie náhodných celých čísel v Go
Môžete použiť matematika/randovIntn funkcia na generovanie náhodných čísel v rozsahu.
importovať (
"fmt"
"math/rand"
"čas"
)funcHlavná() {
rand. Semeno (čas. Teraz().UnixNano())// Intn vygeneruje náhodné celé číslo medzi 0 a 100
// (okrem 100)
randomInt := rand. Intn(100)
fmt. Println (randomInt)
}
Tento kód odovzdá aktuálny čas do Semeno funkciu. Inicializuje predvolený generátor náhodných čísel pre pseudonáhodnosť.
The Intn funkcia balíka rand generuje náhodné číslo v zadanom rozsahu, v tomto prípade od 0 do 100.
Generovať náhodné čísla s pohyblivou rádovou čiarkou
Môžete generovať náhodné čísla s pohyblivou rádovou čiarkou pomocou Plavák32 a Plavák64 funkcie. Vracajú 32-bitové a 64-bitové čísla s pohyblivou rádovou čiarkou.
Tu je návod, ako môžete v Go vygenerovať náhodné 64-bitové čísla s pohyblivou rádovou čiarkou.
importovať (
"fmt"
"math/rand"
"čas"
)funcHlavná() {
rand. Semeno (čas. Teraz().UnixNano())// vygeneruje náhodný float64 medzi 0,0 a 1,0
randomFloat := rand. Float64()
fmt. Println (randomFloat)
}
Proces generovania 32-bitových čísel s pohyblivou rádovou čiarkou je rovnaký ako pri generovaní náhodných 64-bitových čísel s pohyblivou rádovou čiarkou.
Generovanie kryptograficky bezpečných náhodných čísel v službe Go
Môžete použiť Int funkciu krypto/rand balík na generovanie kryptograficky bezpečného náhodného čísla. The Int funkcia preberá inštanciu čítačky a maximálny počet pre limit.
importovať (
"crypto/rand"
"fmt"
"matematický/veľký"
)funcHlavná() {
// Vytvorte veľký. Int s maximálnou hodnotou pre požadovaný rozsah
max := veľký. NewInt(100000000)
// Generovanie náhodného veľkého. Int
// Prvým argumentom je čítačka, ktorá vracia náhodné čísla
// Druhý argument je maximálna hodnota (nezahrnutá)
randInt, err := rand. Int (rand. Čítačka, max)
ak chyba!= nula {
fmt. Println("Chyba pri generovaní náhodného čísla:", chyba)
vrátiť
}
fmt. Println("Náhodné číslo:", randInt)
}
The max premenná definuje maximálnu hodnotu pre náhodné číslo pomocou NewInt funkciu matematika/veľká balík. The Int funkcia vráti náhodné celé číslo a chybu pri spracovaní.
Generovanie kryptograficky bezpečných náhodných hodnôt
The krypto/rand balík neposkytuje vstavané funkcie na generovanie kryptograficky bezpečné náhodné reťazce. Napriek tomu sa môžete obísť pomocou Čítať funkciu.
importovať (
"crypto/rand"
"fmt"
)funckryptoNáhodne(stringChars reťazec, hodnotaDĺžka int32)reťazec {
bytesSlice := urobiť([]byte, hodnotaLength)
_, chyba := rand. Čítať (bytesSlice)ak chyba!= nula {
vrátiť"Vyskytla sa chyba pri čítaní z bajtového výseku"
}pre pos, hodnota := rozsah bytesSlice {
randomize := hodnota % byte(len(stringChars))
bytesSlice[pos] = stringChars[randomize]
}vrátiťreťazec(bytesSlice)
}
funcHlavná() {
fmt. Println (cryptoRandom("Pneumonoultram" +
"ikroskopická silikovolkanokonióza", 10))
}
The kryptoNáhodne funkcia uvedená vyššie berie reťazec na generovanie náhodného reťazca. Trvá tiež dĺžku – 32-bitové celé číslo – a vráti reťazec.
V kryptoNáhodne funkcia, bytesSlice premenná je časť požadovanej dĺžky reťazca. Slučka for-range prechádza bajtovým rezom a vracia a získava modul prvkov rezu a dĺžku reťazca v bajtoch. Aktualizuje index bajtového rezu pomocou indexu hodnoty modulo reťazca.
Nakoniec, kryptoNáhodne funkcia vráti formát reťazca bajtového rezu.
Môžete generovať UUID s Go
Generovanie náhodných hodnôt je užitočné pre širokú škálu prípadov použitia. Ak potrebujete veľa náhodných, jedinečných hodnôt, môžete použiť UUID.
UUID (Universally Unique Identifiers) zabezpečujú globálnu jedinečnosť identifikátorov. Môžete ich použiť na rozlíšenie medzi prostriedkami naprieč systémami, pričom sa vyhnete konfliktom názvov.
Existuje mnoho balíkov, ktoré môžete použiť na generovanie UUID v Go. Na zavolanie uuid môžete použiť balík os vo svojom operačnom systéme, uchýlite sa k balíku UUID od spoločnosti Google alebo na vygenerovanie použite balík gouuid UUID.