Rastgele sayı üretimi birçok görev için önemlidir. Bunlara oyun geliştirme, kriptografi ve veri analizi dahildir. Rastgele değerler, bir değişkenlik ve öngörülemezlik unsuru ile farklı sonuçlara izin verir.
Go, standart kitaplıkta rasgele değerler oluşturmak için iki paket sağlar: matematik/rand Ve kripto/rand. bu matematik/rand paket ağırlıklı olarak matematiksel işlemler içindir. bu kripto/rand paket kriptografik olarak güvenli işlemleri yönetir.
Rand Paketleri
bu matematik/rand paketi için esnek bir yöntem sağlar rasgele sayılar üretmek. Çeşitli sözde rasgele sayı nesillerini uygular. Paket, farklı dağılımlara sahip rastgele bir sayı üretebilir ve rastgele diziyi kontrol etmek için tohumları kullanabilir. Aynı anda veya paralel olarak rasgele sayılar da üretebilir.
bu kripto/rand paketi, kriptografik olarak güvenli bir rasgele sayı üreteci uygular. Yüksek olasılıkla rasgele asal sayılar üretme işlevi içerir.
Bu paketler aynı ada sahip olduğundan, her ikisini de tek bir programda kullanmak istiyorsanız takma ad kullanmanız gerekir, örneğin:
içe aktarmak (
krank "kripto/rand"
Bay ve "matematik/rand"
)
Go'da Rastgele Tam Sayılar Oluşturma
kullanabilirsiniz matematik/rand'lariç bir aralıkta rasgele sayılar üretme işlevi.
içe aktarmak (
"fmt"
"matematik/rand"
"zaman"
)işlevana() {
rand. Tohum (zaman. Şimdi().UnixNano())// Intn, 0 ile 100 arasında rastgele bir tamsayı üretir
// (100 dahil değil)
randomInt := rand. dahili(100)
fmt. Println (randomInt)
}
Bu kod, geçerli saati Tohum işlev. Sözde rasgelelik için varsayılan rasgele sayı üretecini başlatır.
bu iç rand paketinin işlevi, belirtilen bir aralık arasında, bu durumda 0 ile 100 arasında rastgele bir sayı üretir.
Rastgele Kayan Noktalı Sayılar Oluşturun
ile rastgele kayan noktalı sayılar üretebilirsiniz. Float32 Ve Float64 fonksiyonlar. Sırasıyla 32 bit ve 64 bit kayan nokta sayıları döndürürler.
Go'da rastgele 64 bit kayan noktalı sayıları nasıl oluşturabileceğiniz aşağıda açıklanmıştır.
içe aktarmak (
"fmt"
"matematik/rand"
"zaman"
)işlevana() {
rand. Tohum (zaman. Şimdi().UnixNano())// 0.0 ile 1.0 arasında rastgele bir float64 üret
randomFloat := rand. Float64()
fmt. Println (randomFloat)
}
32 bitlik kayan noktalı sayıların üretilmesi süreci, rasgele 64 bitlik kayan noktalı sayıların üretilmesiyle aynıdır.
Go'da Kriptografik Olarak Güvenli Rastgele Sayılar Oluşturma
kullanabilirsiniz iç işlevi kripto/rand şifreli olarak güvenli bir rasgele sayı oluşturmak için paket. bu iç işlev, bir okuyucu örneğini ve sınır için bir maksimum sayıyı alır.
içe aktarmak (
"kripto/rand"
"fmt"
"matematik/büyük"
)işlevana() {
// Bir büyük oluştur. İstenen aralık için maksimum değere sahip Int
maks := büyük. Yeni Giriş(100000000)
// Rastgele bir büyük oluştur. iç
// İlk argüman rasgele sayılar döndüren bir okuyucudur.
// İkinci bağımsız değişken maksimum değerdir (dahil değildir)
randInt, hata := rand. İç (rand. Okuyucu, maks.)
eğer hata!= sıfır {
fmt. Yazdır("Rastgele sayı oluşturulurken hata oluştu:", hata)
geri dönmek
}
fmt. Yazdır("Rastgele sayı:", RandInt)
}
bu maks. değişkeni kullanarak rasgele sayı için maksimum değeri tanımlar. Yeni Giriş işlevi matematik/büyük paket. bu iç işlev, rasgele tamsayı ve işleme için bir hata döndürür.
Kriptografik Olarak Güvenli Rastgele Değerler Oluşturma
bu kripto/rand paket oluşturmak için yerleşik işlevsellik sağlamaz kriptografik olarak güvenli rastgele diziler Yine de, kullanarak bu sorunu çözebilirsiniz. Okumak işlev.
içe aktarmak (
"kripto/rand"
"fmt"
)işlevkriptoRastgele(stringChars sicim, değerUzunluğu int32)sicim {
bytesSlice := yapmak([]bayt, değer Uzunluğu)
_, hata := rand. Oku (bytesSlice)eğer hata!= sıfır {
geri dönmek"Bayt diliminden okumada bir hata oluştu"
}için konum, değer := menzil bayt Dilim {
rastgele := değer % bayt(len(stringChars))
bytesSlice[pos] = stringChars[randomize]
}geri dönmeksicim(bayt Dilim)
}
işlevana() {
fmt. Println (cryptoRandom("Pnömoni" +
"ikroskopik silicovolcanoconiosis", 10))
}
bu kriptoRastgele yukarıdaki işlev, rastgele bir dize oluşturmak için bir dize alır. Ayrıca bir uzunluk (32 bitlik bir tamsayı) alır ve bir dize döndürür.
İçinde kriptoRastgele işlev, bayt Dilim değişken, gerekli dize uzunluğunun bir dilimidir. for-range döngüsü, bayt dilimini geçer ve dilimin öğelerinin modülünü ve dizenin bayt cinsinden uzunluğunu döndürür ve alır. Bayt diliminin dizinini dizenin modulo değer dizini ile günceller.
Son olarak, kriptoRastgele işlev, bayt diliminin dize biçimini döndürür.
Go İle UUID'ler Oluşturabilirsiniz
Rastgele değerler oluşturmak, çok çeşitli kullanım durumları için kullanışlıdır. Birçok rasgele, benzersiz değere ihtiyacınız varsa, UUID'leri kullanabilirsiniz.
UUID'ler (Evrensel Olarak Benzersiz Tanımlayıcılar), tanımlayıcılar için küresel benzersizlik sağlar. Bunları, adlandırma çakışmalarından kaçınırken, sistemler arasındaki kaynakları ayırt etmek için kullanabilirsiniz.
Go'da UUID'ler oluşturmak için kullanabileceğiniz birçok paket vardır. Uuid'i çağırmak için os paketini kullanabilirsiniz. oluşturmak için Google'ın UUID paketine başvurun veya gouuid paketini kullanın. UUID'ler.