Kaltaisesi lukijat auttavat tukemaan MUO: ta. Kun teet ostoksen käyttämällä sivustollamme olevia linkkejä, voimme ansaita kumppanipalkkion. Lue lisää.

Satunnaislukujen luominen on tärkeää monissa tehtävissä. Näitä ovat pelien kehittäminen, kryptografia ja data-analyysi. Satunnaiset arvot mahdollistavat erilaiset tulokset, joihin liittyy vaihtelua ja arvaamattomuutta.

Go tarjoaa kaksi pakettia satunnaisten arvojen luomiseen vakiokirjastossa: matematiikka/rand ja krypto/rand. The matematiikka/rand paketti on pääasiassa matemaattisia operaatioita varten. The krypto/rand paketti käsittelee kryptografisesti suojattuja toimintoja.

Rand-paketit

The matematiikka/rand paketti tarjoaa joustavan menetelmän tuottaa satunnaislukuja. Se toteuttaa erilaisia ​​pseudosatunnaislukusukupolvia. Paketti voi luoda satunnaisluvun eri jakaumilla ja käyttää siemeniä satunnaissekvenssin ohjaamiseen. Se voi myös tuottaa satunnaislukuja samanaikaisesti tai rinnakkain.

The krypto/rand paketti toteuttaa kryptografisesti suojatun satunnaislukugeneraattorin. Se sisältää toiminnon satunnaisten alkulukujen luomiseen suurella todennäköisyydellä.

instagram viewer

Koska näillä paketeilla on sama nimi, sinun on käytettävä aliaksia, jos haluat käyttää molempia yhdessä ohjelmassa, esimerkiksi:

tuonti (
crand "crypto/rand"
mrand "matematiikka/rand"
)

Satunnaisten kokonaislukujen luominen Gossa

Voit käyttää matematiikka/randIntn toiminto tuottaa satunnaislukuja alueella.

tuonti (
"fmt"
"matematiikka/rand"
"aika"
)

funcpää() {
rand. Siemen (aika. Nyt().UnixNano())

// Intn luo satunnaisen kokonaisluvun välillä 0-100
// (ei sisällä 100)
randomInt := rand. Intn(100)

fmt. Println (randomInt)
}

Tämä koodi välittää nykyisen ajan Siemen toiminto. Se alustaa oletusarvoisen satunnaislukugeneraattorin näennäissatunnaisuutta varten.

The Intn rand-paketin funktio luo satunnaisluvun tietyn alueen välillä, tässä tapauksessa 0-100.

Luo satunnaisia ​​liukulukuja

Voit luoda satunnaisia ​​liukulukuja käyttämällä Kelluva 32 ja Float64 toimintoja. Ne palauttavat vastaavasti 32-bittiset ja 64-bittiset liukulukuluvut.

Näin voit luoda satunnaisia ​​64-bittisiä liukulukuja Gossa.

tuonti (
"fmt"
"matematiikka/rand"
"aika"
)

funcpää() {
rand. Siemen (aika. Nyt().UnixNano())

// luo satunnaisen floatin64 väliltä 0.0 - 1.0
randomFloat := rand. Float64()

fmt. Println (randomFloat)
}

32-bittisten liukulukujen generointiprosessi on sama kuin satunnaisten 64-bittisten liukulukujen luominen.

Luo kryptografisesti turvallisia satunnaisia ​​numeroita Gossa

Voit käyttää Int toiminto krypto/rand paketti kryptografisesti suojatun satunnaisluvun luomiseksi. The Int funktio ottaa lukijainstanssin ja enimmäismäärän rajalle.

tuonti (
"crypto/rand"
"fmt"
"matematiikka/iso"
)

funcpää() {
// Luo iso. Int halutun alueen enimmäisarvolla
max := iso. NewInt(100000000)

// Luo satunnainen iso. Int
// Ensimmäinen argumentti on lukija, joka palauttaa satunnaisia ​​lukuja
// Toinen argumentti on enimmäisarvo (ei sisällä)
randInt, err := rand. Int (rand. Lukija, max)

jos virhe! = nolla {
fmt. Println("Virhe luotaessa satunnaislukua:", virhe)
palata
}

fmt. Println("Satunnainen numero:", randInt)
}

The max muuttuja määrittää satunnaisluvun enimmäisarvon käyttämällä NewInt toiminto matematiikka/iso paketti. The Int funktio palauttaa satunnaisen kokonaisluvun ja käsittelyvirheen.

Luodaan kryptografisesti turvallisia satunnaisia ​​arvoja

The krypto/rand paketti ei tarjoa sisäänrakennettua luomistoimintoa kryptografisesti suojattu satunnaisia ​​merkkijonoja. Voit kuitenkin kiertää tämän käyttämällä Lukea toiminto.

tuonti (
"crypto/rand"
"fmt"
)

funckryptoSatunnainen(merkkijonomerkit merkkijono, valueLength int32)merkkijono {
bytesSlice := tehdä([]tavu, valueLength)
_, err := rand. Lue (bytesSlice)

jos virhe! = nolla {
palata"Tavuviipaleen lukemisessa tapahtui virhe"
}

varten pos, arvo := alue bytesSlice {
satunnaista := arvo % tavu(len(merkkijonomerkit))
bytesSlice[pos] = merkkijonomerkki[satunnainen]
}

palatamerkkijono(bytesSlice)
}

funcpää() {
fmt. Println (cryptoRandom("Pneumonoultram" +
"ikroskooppinen silikovolkanokonioosi", 10))
}

The kryptoSatunnainen Yllä oleva funktio ottaa merkkijonon, josta syntyy satunnainen merkkijono. Se ottaa myös pituuden – 32-bittisen kokonaisluvun – ja palauttaa merkkijonon.

Vuonna kryptoSatunnainen toiminto, bytesSlice muuttuja on siivu vaaditusta merkkijonon pituudesta. For-range -silmukka kulkee tavuviipaleen läpi ja palauttaa ja hakee viipaleen elementtien moduulin ja merkkijonon pituuden tavuina. Se päivittää tavuviipaleen indeksin merkkijonon moduloarvoindeksillä.

Lopuksi, kryptoSatunnainen funktio palauttaa tavuviipaleen merkkijonomuodon.

Voit luoda UUID-tunnuksia Golla

Satunnaisarvojen luominen on kätevää monenlaisissa käyttötapauksissa. Jos tarvitset useita satunnaisia, yksilöllisiä arvoja, voit käyttää UUID-tunnuksia.

UUID: t (Universally Unique Identifiers) varmistavat tunnisteiden maailmanlaajuisen ainutlaatuisuuden. Voit käyttää niitä erottelemaan resurssit eri järjestelmissä ja välttämään nimeämisristiriitoja.

On olemassa monia paketteja, joita voit käyttää UUID-tunnusten luomiseen Gossa. Voit käyttää os-pakettia soittaaksesi uuidiin -komento käyttöjärjestelmässäsi, turvaudu Googlen UUID-pakettiin tai käytä gouuid-pakettia luomiseen UUID: t.