Интерфейс rand.Source

Интерфейс rand.Source определяет контракт для источника случайных чисел. Он содержит два метода: Int63, который возвращает случайное 63-битное целое число, и Seed, который инициализирует источник начальным значением. Этот интерфейс используется функцией rand.New для создания нового генератора случайных чисел.

Синтаксис

gotype Source interface {
  Int63() int64
  Seed(seed int64)
}

Пример

Давайте создадим генератор случайных чисел с использованием стандартного источника rand.NewSource:

gopackage main

import (
  "fmt"
  "math/rand"
)

func main() {
  source := rand.NewSource(42)
  rnd := rand.New(source)

  res := rnd.Int63()
  fmt.Println(res)
}

Результат выполнения кода:

go"7136427411855439588"

Пример

Создадим два генератора с разными начальными значениями и сравним результаты:

gopackage main

import (
  "fmt"
  "math/rand"
)

func main() {
  source1 := rand.NewSource(1)
  rnd1 := rand.New(source1)

  source2 := rand.NewSource(2)
  rnd2 := rand.New(source2)

  res1 := rnd1.Int63()
  res2 := rnd2.Int63()

  fmt.Println(res1)
  fmt.Println(res2)
}

Результат выполнения кода:

go"5577006791947779410"
"9571650658724251617"

Пример

Используем метод Seed для повторной инициализации источника:

gopackage main

import (
  "fmt"
  "math/rand"
)

func main() {
  source := rand.NewSource(10)
  rnd := rand.New(source)

  res1 := rnd.Int63()

  source.Seed(10)
  rnd = rand.New(source)

  res2 := rnd.Int63()

  fmt.Println(res1)
  fmt.Println(res2)
}

Результат выполнения кода:

go"4916763548488312710"
"4916763548488312710"

Смотрите также

  • функцию rand.NewSource,
    которая создает новый источник случайных чисел
  • функцию rand.New,
    которая создает новый генератор на основе источника
  • функцию rand.Int63,
    которая возвращает случайное 63-битное число
  • функцию rand.Seed,
    которая устанавливает начальное значение для глобального генератора