توفّر حزمة 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 1.20+ تُختار البذرة تلقائيًا بشكل عشوائي، لذا سترى متتالية مختلفة من الأعداد العشوائية في كل مرة تشغّل فيها برنامجك.
في الإصدارات السابقة من Go، كانت البذرة 1 افتراضيًا.
لذا، للحصول على متتاليات مختلفة عند تشغيل البرنامج عدة مرات، كان عليك ضبط بذرة مولّد الأعداد العشوائية يدويًا، مثلًا بالوقت الحالي، قبل جلب أي أعداد عشوائية.
rand.Seed(time.Now().UnixNano())
تعمل Elaine على لعبة جديدة للأطفال تضم حيوانات وعصيًا سحرية. حان الوقت لكتابة دوال ترمي حجر النرد، وتولّد طاقة عشوائية للعصا السحرية، وتخلط شريحة.
نفّذ دالة RollADie.
سيكون هذا حجر النرد التقليدي ذا العشرين وجهًا، بأرقام من 1 إلى 20.
d := RollADie() // d will be assigned a random int, 1 <= d <= 20
نفّذ دالة GenerateWandEnergy.
ينبغي أن تكون طاقة العصا السحرية عددًا عشريًا عشوائيًا أكبر من أو يساوي 0.0 وأقل من 12.0.
f := GenerateWandEnergy() // f will be assigned a random float64, 0.0 <= f < 12.0
تتضمن اللعبة ثمانية حيوانات مختلفة:
اكتب دالة ShuffleAnimals تُرجع شريحة تحتوي على الحيوانات الثمانية بترتيب عشوائي.
سجّل في Exercism لتتعلّم وتتقن Go عبر 34 مفهومًا165 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.