gobyexample/examples/random-numbers/random-numbers.go
2019-10-10 16:30:40 +03:00

60 lines
2.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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