«بسته»ی math/rand امکان تولید اعداد شبهتصادفی را فراهم میکند.
در ادامه میبینید چطور میتوانید یک عدد صحیح تصادفی بین 0 و 99 تولید کنید:
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 ۱.۲۰ به بعد، بذر بهصورت خودکار و تصادفی انتخاب میشود. بنابراین هر بار که برنامهتان را اجرا کنید، دنبالهی متفاوتی از اعداد تصادفی خواهید دید.
در نسخههای قبلی Go، بذر بهطور پیشفرض 1 بود.
بنابراین برای به دست آوردن دنبالههای متفاوت در اجراهای مختلف برنامه، باید پیش از گرفتن هر عدد تصادفی، بذر مولد اعداد تصادفی را بهصورت دستی تعیین میکردید، مثلاً با زمان جاری.
rand.Seed(time.Now().UnixNano())
الین دارد روی یک بازی کودکانهی جدید کار میکند که در آن حیوانات و عصاهای جادویی حضور دارند. وقت آن رسیده که توابعی برای انداختن تاس، تولید انرژی تصادفی عصا و بههمزدن یک برش بنویسیم.
یک تابع RollADie پیادهسازی کنید.
این همان تاس سنتی بیستوجهی با اعداد ۱ تا ۲۰ است.
d := RollADie() // d will be assigned a random int, 1 <= d <= 20
یک تابع GenerateWandEnergy پیادهسازی کنید.
انرژی عصا باید یک عدد اعشاری تصادفی بزرگتر یا مساوی ۰.۰ و کوچکتر از ۱۲.۰ باشد.
f := GenerateWandEnergy() // f will be assigned a random float64, 0.0 <= f < 12.0
این بازی هشت حیوان مختلف دارد:
تابعی به اسم ShuffleAnimals بنویسید که برشی شامل این هشت حیوان را به ترتیب تصادفی برمیگرداند.