Функция rand.NewSource

Функция rand.NewSource создает новый источник псевдослучайных чисел. В качестве единственного параметра она принимает целочисленное значение seed (начальное число), которое определяет начальное состояние генератора. При одинаковом значении seed генератор будет выдавать одинаковую последовательность чисел, что полезно для воспроизводимости результатов. Функция возвращает значение типа rand.Source, которое можно использовать для создания генератора с помощью rand.New.

Синтаксис

gorand.NewSource(seed)

Для использования функции необходимо импортировать пакет math/rand.

goimport "math/rand"

Пример

Создадим источник с начальным значением 42 и сгенерируем три случайных числа типа int64:

gopackage main

import (
  "fmt"
  "math/rand"
)

func main() {
  src := rand.NewSource(42)
  r := rand.New(src)

  res1 := r.Int63()
  res2 := r.Int63()
  res3 := r.Int63()

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

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

go1532268284764708450
8902157714064649733
2816270544665174715

Пример

Покажем, что при одинаковом начальном значении последовательность чисел всегда одинакова:

gopackage main

import (
  "fmt"
  "math/rand"
)

func main() {
  src1 := rand.NewSource(100)
  r1 := rand.New(src1)

  src2 := rand.NewSource(100)
  r2 := rand.New(src2)

  res1 := r1.Int63()
  res2 := r2.Int63()

  fmt.Println(res1 == res2)
}

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

gotrue

Пример

Используем rand.NewSource для генерации чисел в заданном диапазоне с помощью Intn:

gopackage main

import (
  "fmt"
  "math/rand"
)

func main() {
  src := rand.NewSource(12345)
  r := rand.New(src)

  res1 := r.Intn(100)
  res2 := r.Intn(100)
  res3 := r.Intn(100)

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

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

go38
85
99

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

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