Ошибки при работе с псевдослучайной генерации чисел (Golang)

Код -

package main

import (
    "fmt"
    "math/rand"
    "time"

)
func randInt(max int) int {

    return rand.Intn(max)
}
var ID = randInt(1000000)

func main() {
    rand.Seed(time.Now().UTC().UnixNano() + 1)
    for i := 0; i < 10; i++ {
    fmt.Println(ID)
    }

}

После выполнения всегда выводит единое значение, а точнее 498081. При этом, если, return rand.Intn(max), изменить на return rand.Intn(max+1) Значение на выходе 496783.

Как и почему так происходит? Может дело в seed, или в том, что я задал лишь одну переменную..Но тогда почему всегда одно значение? Как тогда делать правильно?


Ответы (1 шт):

Автор решения: Artem.Cyou

Тебе нужно переменную с функцией randInt засунуть в цикл иначе ты просто выводишь 10 раз одно и тоже число, а если она будет в цикле, то у нее будет каждый раз новое значение.

package main

import (
"fmt"
"math/rand"
"time"
)

func randInt(max int) int {
return rand.Intn(max)
}

func main() {
rand.Seed(time.Now().UTC().UnixNano() + 1)

for i := 0; i < 10; i++ {
    iD:= randInt(1000000)
    fmt.Println(iD)
}
}
→ Ссылка