Пакет 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())