بستهی math/rand از تولید اعداد شبهتصادفی پشتیبانی میکند.
روش تولید یک عدد صحیح تصادفی بین 0 و 99 این است:
import "math/rand"
n := rand.Intn(100) // n is a random int, 0 <= n < 100
تابع rand.Float64 یک عدد اعشاری تصادفی بین 0.0 و 1.0 برمیگرداند:
f := rand.Float64() // f is a random float64, 0.0 <= f < 1.0
همچنین میتوان ترتیب یک اسلایس (یا ساختارهای دادهی دیگر) را به هم ریخت:
x := []string{"a", "b", "c", "d", "e"}
// shuffling the slice put its elements into a random order
rand.Shuffle(len(x), func(i, j int) {
x[i], x[j] = x[j], x[i]
})
دنبالههای عددی که بستهی math/rand تولید میکند، واقعاً تصادفی نیستند.
اگر یک مقدار «بذر» مشخص داده شود، نتایج کاملاً قطعیاند.
در Go نسخهی 1.20 و بالاتر، بذر بهصورت خودکار و تصادفی انتخاب میشود؛ بنابراین هر بار که برنامهتان را اجرا کنید، دنبالهی متفاوتی از اعداد تصادفی میبینید.
در نسخههای پیشین Go، بذر بهطور پیشفرض 1 بود.
بنابراین برای گرفتن دنبالههای متفاوت در اجراهای مختلف برنامه، باید پیش از گرفتن هر عدد تصادفی، بذر مولد اعداد تصادفی را بهصورت دستی (برای نمونه با زمان فعلی) تنظیم میکردید.
rand.Seed(time.Now().UnixNano())