#golang
Как получить случайное число? Вот функция, но она выводить всегда цифру "81" package main import ("fmt"; "math/rand") func main() { fmt.Println(rand.Intn(100)) }
Ответы
Ответ 1
Генератор случайных чисел обычно нужно рандомизировать перед использованием, иначе, он, действительно, будет выдавать одну и ту же последовательность. В golang это можно сделать вот так: rand.Seed(time.Now().UnixNano()) https://golang.org/pkg/math/rand/#Seed P.S. Оставлю тут ещё ссылку на англоязычную версию SO, с вопросом, как правильно инициализировать рандомайзер: golang random number generator how to seed properlyОтвет 2
Если нужно псевдослучайное число к которому нет требований по воспроизводимости, то можно воспользоваться модулем math/rand. rand.Seed(time.Now().Unix()) Если нужен генератор случайных чисел, которое будет невоспроизводимо (к примеру, для шифрования/криптографии) - стоит воспользоватся crypto/rand, который использует API системы для получения псевдослучайного числа import ( "math/big" "crypto/rand" ) r, err := rand.Int(rand.Reader, big.NewInt(80))Ответ 3
Решение: package main import ("fmt"; "math/rand"; "time") func main() { rand.Seed(time.Now().UTC().UnixNano()) var bytes int bytes = rand.Intn(100) fmt.Println(bytes) }
Комментариев нет:
Отправить комментарий