// Пакет Go `math/rand` обеспечивает генерацию // [псевдослучайных чисел](http://en.wikipedia.org/wiki/Pseudorandom_number_generator). package main import ( "fmt" "math/rand" "time" ) func main() { // Например, `rand.Intn` вернет случайное `целое число` в // диапазоне `0 <= n < 100`. fmt.Print(rand.Intn(100), ",") fmt.Print(rand.Intn(100)) fmt.Println() // `rand.Float64` вернет `число с плавающей точкой` в присвоит // его в `f`, где `f` будет в промежутке `0.0 <= f < 1.0`. fmt.Println(rand.Float64()) // Этот способ может быть использован для генерации других // случайных чисел с плавающей точкой в разных диапазонах, // например для диапазона `5.0 <= f' < 10.0`. fmt.Print((rand.Float64()*5)+5, ",") fmt.Print((rand.Float64() * 5) + 5) fmt.Println() // Генератор чисел по умолчанию является детерминированным, // поэтому по умолчанию он будет каждый раз генерировать // одну и ту же последовательность чисел. Чтобы произвести // различные последовательности, дайте ему `соль`(https://ru.wikipedia.org/wiki/Соль_(криптография)), // которая изменяется. Обратите внимание, что это не // безопасно использовать для генерации случайных чисел, // которые вы намерены хранить в секрете, используйте // `crypto/rand` для них. s1 := rand.NewSource(time.Now().UnixNano()) r1 := rand.New(s1) // Вызвать результат `rand.Rand` можно точно так же, как и // функции в пакете `rand`. fmt.Print(r1.Intn(100), ",") fmt.Print(r1.Intn(100)) fmt.Println() // Если вы используете одну и ту же соль для генерации // чисел, то они будут совпадать. s2 := rand.NewSource(42) r2 := rand.New(s2) fmt.Print(r2.Intn(100), ",") fmt.Print(r2.Intn(100)) fmt.Println() s3 := rand.NewSource(42) r3 := rand.New(s3) fmt.Print(r3.Intn(100), ",") fmt.Print(r3.Intn(100)) }