Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Случайное число в golang

#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) }

Комментариев нет:

Отправить комментарий