Я пытаюсь точно понять, почему при вызове из внешней функции мой генератор случайных чисел, отобранный по времени, возвращает последовательности идентичных чисел.
Минимальный рабочий пример выдачи:
package main
import (
"fmt"
"math/rand"
"time"
)
//Generates random int as function of range
func getRand(Range int) int {
s1 := rand.NewSource(time.Now().UnixNano())
r1 := rand.New(s1)
return r1.Intn(Range)
}
//Print 100 random ints between 0 and 100
func main() {
for i := 0; i < 100; i++ {
fmt.Print(getRand(100), ", ")
}
}
Результат этого
Out[1]: 40, 40, 40, 40, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 34,
34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 47,
47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
47,47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99,
Я хотел бы знать, почему это происходит для моего собственного образования.Я также открыт для предложений для решения.
Подробности: мне нужно вызывать случайные числа во многих внешних функциях моего кода, но, подобно этому MWE, при заполнении внутри функции, отличной от main, они многократно возвращают одни и те же числа.Кроме того, мне нужно динамически обновлять диапазон, поэтому создание списков априори не вариант.Я бы предпочел не генерировать числа в main () и передавать их в каждую функцию - диапазоны вычисляются внутри них, и это усложнит ситуацию