توفر الحزمة 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())